冒泡排序:
1. 可能需要进行多趟排序,最终才能实现有序
2. 每一趟排序,需要依次比较两个元素的大小关系,满足条件再交换
3. 当左侧元素大于右侧元素时,应该交换这两个元素
4. 每一趟排序结束后,当前最大的元素会找到自己的固定位置(在最右侧)
5. 每一趟处理的元素个数是递减的
6. n个元素的冒泡排序需要n-1趟
比如,排序 15, 37, 12, 9 ,4
第一趟:
比较15和37不需要变换位置,
比较37和12: 15 ,12,37,9,4
比较37和9: 15,12,9,37,4
比较37和4: 15, 12, 9, 4, 37 (下一轮比较中37不再进行比较)
第一趟找到了最大值 37
第二趟:
比较 15, 12, 9, 4,37
12, 15,9, 4,37
12, 9,15, 4,37
12, 9, 4, 15,37(下一轮比较中15,37不再进行比较)
第三趟:
9, 12, 4, 15, 37
9, 4, 12, 15, 37
第四趟:
4, 9, 12, 15, 37
#include<stdio.h>
#include<stdlib.h>
#define LENGTH 10
int main(void) {
int a[LENGTH] = { 1,5,10,9,3,4,8,6,7,2 };
int tmp;
/*执行n-1趟*/
for (int i = 1; i < LENGTH; i++) {
/*处理一趟排序*/
for (int j = 0; j < LENGTH - i; j++) {
/*满足下列条件才交换*/
if (a[j] > a[j + 1]) {
tmp = a[j];
a[j] = a[j + 1];
a[j + 1] = tmp;
}
}
}
for (int i = 0; i < LENGTH; i++) {
printf("%d ", a[i]);
}
printf("\n");
system("pause");
return 0;
}