设有一个大小为 N 的无序序列,要进行(n-1)趟比较。冒泡排序就是要每趟排序过程中通过两两比较,找到第 i 个小(大)的元素,将其往上排。
经过第1趟比较数组中最大的元素放在了最右边,经过第2趟比较数组中第2大的元素放在了倒数第2个位置,经过第3趟比较数组中第3大的元素放在了倒数第3个位置, ... ,经过第n趟比较,数组就有序了。
图示过程:
void Swap(int *a, int *b)
{
int tmp = *a;
*a = *b;
*b = tmp;
}
void BubbleSort(int *a, int n)
{
for (int end = n - 1; end > 0; --end)
{
int flag = 0;
for (int i = 0; i < n - 1; ++i)
{
if (a[i]>a[i + 1])
{
Swap(&a[i], &a[i + 1]);
flag = 1;
}
}
if (flag==0)
{
break;
}
}
}
代码2
#include<stdio.h>
#include<stdlib.h>
void BabbleSort(int *a, int n)
{
int tmp;
int i, j;
for (i=0 ; i < n-1; i++)
{
for (j = 0; j < n - i - 1; j++)
{
if (a[j]>a[j+1])
{
tmp = a[j];
a[j] = a[j + 1];
a[j + 1] = tmp;
}
}
}
}
int main()
{
int i;
int a[10] = { 5, 3, 6, 7, 9, 1, 2, 8, 4, 0 };
int n = sizeof(a) / sizeof(a[0]);
BabbleSort(a, n);
for ( i = 0; i < n; i++)
{
printf("%d\n", a[i]);
}
putchar('\n');
system("pause");
return 0;
}