起泡排序算法思路
有序概念
在由一组整数组成的序列A[0, n - 1]中,满足A[i - 1] < A[i]的相邻元素称作顺序的;否则是逆序的。不难看出,有序序列中每一对相邻元素都是顺序的,亦即,对任意1 < i < n都有A[i - 1] < A[i];反之,所有相邻元素均顺序的序列,也必然整体有序。
思路
由有序序列的上述特征,我们可以通过不断改善局部的有序性实现整体的有序:从前向后依次检查每一对相邻元素,一旦发现逆序即交换二者的位置。对于长度为n的序列,共需做n - 1次比较和不超过n - 1次交换,这一过程称作一趟扫描交换。每一趟扫描都至少会有一个元素就位。
排序过程中,所有元素朝各自最终位置亦步亦趋的移动过程,犹如气泡在水中的上下沉浮,起泡排序(bubble sort)算法也因此得名。
起泡排序实现
void bubble_sort(int data[], int n)
{
int sorted = 0; // false
int i;
while (!sorted)
{
sorted = 1;
for (i = 1; i < n; i++)
{
if (data[i-1] > data[i])
{
int temp = data[i];
data[i] = data[i-1];
data[i-1] = temp;
sorted = 0;
}
n--;
}
}