冒泡排序(Bubble Sort)
- 将序列中的第1个元素与第2个元素进行比较,若前者大于后者,则将第1个元素与第2个元素进行位置交换,否则不交换。
- 再将第2个元素与第3个元素进行比较,若前者大于后者,则将第2个元素与第3个元素进行位置交换,否则不交换。
- 依次类推,直到将第n-1个元素与第n个元素进行比较为止。
这个过程称为第1趟冒泡排序。经过第1趟冒泡排序后,将长度为n的序列中最大的元素置于了序列的尾部,即第n个位置上。
然后再对剩下的n-1个元素作同样的操作,称之为第2趟冒泡排序。经过了第2趟的冒泡排序,将剩下的n-1个元素中最大的元素置于了序列n-1的位置上。
如此进行下去,当执行完第n-1趟的冒泡排序后,就可以将序列中剩下2个元素中的最大的元素置于序列第2个位置上,第1个位置上的元素就是该序列中最小的元素。
一个包含n个元素的序列要进行n-1趟冒泡排序,第i趟冒泡排序将第1~n-i+1个元素中最大的元素交换到第n-i+1个位置上
void BubbleSort(int *a, int len)
{
int i, j;
for (i = 0; i < len - 1; i++) //将最大元素沉底的次数为len-1
{
for (j = 0; j < len - i - 1; j++) //将当前数组最大元素沉底,数组长度缩短
{
if (a[j] > a[j + 1])
mySwap(a, j, j + 1);
myPrint(a, len);
}
myPrint(a, len);
printf("*****************************************\n");
}
}
9 8 7 6 5 4 3 2 1 0
8 9 7 6 5 4 3 2 1 0
8 7 9 6 5 4 3 2 1 0
8 7 6 9 5 4 3 2 1 0
8 7 6 5 9 4 3 2 1 0
8 7 6 5 4 9 3 2 1 0
8 7 6 5 4 3 9 2 1 0
8 7 6 5 4 3 2 9 1 0
8 7 6 5 4 3 2 1 9 0
8 7 6 5 4 3 2 1 0 9
*****************************************
8 7 6 5 4 3 2 1 0 9
7 8 6 5 4 3 2 1 0 9
7 6 8 5 4 3 2 1 0 9
7 6 5 8 4 3 2 1 0 9
7 6 5 4 8 3 2 1 0 9
7 6 5 4 3 8 2 1 0 9
7 6 5 4 3 2 8 1 0 9
7 6 5 4 3 2 1 8 0 9
7 6 5 4 3 2 1 0 8 9
*****************************************
7 6 5 4 3 2 1 0 8 9
6 7 5 4 3 2 1 0 8 9
6 5 7 4 3 2 1 0 8 9
6 5 4 7 3 2 1 0 8 9
6 5 4 3 7 2 1 0 8 9
6 5 4 3 2 7 1 0 8 9
6 5 4 3 2 1 7 0 8 9
6 5 4 3 2 1 0 7 8 9
*****************************************
6 5 4 3 2 1 0 7 8 9
5 6 4 3 2 1 0 7 8 9
5 4 6 3 2 1 0 7 8 9
5 4 3 6 2 1 0 7 8 9
5 4 3 2 6 1 0 7 8 9
5 4 3 2 1 6 0 7 8 9
5 4 3 2 1 0 6 7 8 9
*****************************************
5 4 3 2 1 0 6 7 8 9
4 5 3 2 1 0 6 7 8 9
4 3 5 2 1 0 6 7 8 9
4 3 2 5 1 0 6 7 8 9
4 3 2 1 5 0 6 7 8 9
4 3 2 1 0 5 6 7 8 9
*****************************************
4 3 2 1 0 5 6 7 8 9
3 4 2 1 0 5 6 7 8 9
3 2 4 1 0 5 6 7 8 9
3 2 1 4 0 5 6 7 8 9
3 2 1 0 4 5 6 7 8 9
*****************************************
3 2 1 0 4 5 6 7 8 9
2 3 1 0 4 5 6 7 8 9
2 1 3 0 4 5 6 7 8 9
2 1 0 3 4 5 6 7 8 9
*****************************************
2 1 0 3 4 5 6 7 8 9
1 2 0 3 4 5 6 7 8 9
1 0 2 3 4 5 6 7 8 9
*****************************************
1 0 2 3 4 5 6 7 8 9
0 1 2 3 4 5 6 7 8 9
*****************************************
0 1 2 3 4 5 6 7 8 9
0 1 2 3 4 5 6 7 8 9