文章目录
冒泡排序
1.基本思想
相邻的两个元素进行比较,按照要求进行交换。
升序:从小到大
降序:从大到小
冒泡排序的时间复杂度是 O(n^2)
2 实现思路(以升序为例)
第一趟排序:
第一个元素和第二个元素进行比较,将较大的放在第二个位置上,
然后第二个元素再个第三个元素进行比较,将较大的放在第三个位置上,
依此类推,直到第一趟排序完成,最大的元素就在最后一个位置上了。
第二趟排序:
第一个元素和第二个元素进行比较,将较大的放在第二个位置上,
然后第二个元素再个第三个元素进行比较,将较大的放在第三个位置上,
依此类推,直到第二趟排序完成,第二大的元素就在倒数第二个位置上了。
依此类推,直到整个数据有序。
1.3 代码实现
1 #include <stdio.h>
2 int main(){
3 int s[10] = {33, 22, 11, 44, 56, 35, 88, 123, 90, 100};
4 int i = 0;
5 int j = 0;
6 int temp = 0;
7 int len = sizeof(s)/sizeof(s[0]);
8 //排序前
9 for(i = 0; i < len; i++){
10 printf("%d ", s[i]);
11 }
12 printf("\n");
13 #if 0
14 //先完成一趟排序
15 for(i = 0; i < len‐1; i++){//此处的‐1是为了防止越界的
16 if(s[i] > s[i+1]){
17 temp = s[i];
18 s[i] = s[i+1];
19 s[i+1] = temp; //特别重要 针对一维数组的“三杯水” 数据位置交换方式
20 }
21 }
22 #endif
23 //再完成整个排序
24 for(j = 0; j < len‐1; j++){//外层循环控制排序的次数
25 //此处的‐1是因为最后一趟只有一个元素 不用比较了 n个元素比较n-1次即可
26 for(i = 0; i < len‐1‐j; i++){//此处的‐1是为了防止越界的
27 //此处的 ‐j 是以因为每趟都可以少比较一个元素
28 if(s[i] > s[i+1]){//如果是降序 就将此处的 > 改成 < 即可
29 temp = s[i];
30 s[i] = s[i+1];
31 s[i+1] = temp;
32 }
33 }
34 }
35 //排序后
36 for(i = 0; i < len; i++){
37 printf("%d ", s[i]);
38 }
39 printf("\n");
40
41 return 0;
42 }