冒泡法排序


冒泡排序:

 

=================================================================================== 

案例:

 

 分析:

 

 第一轮排序的代码:

 1 #include <stdio.h>
 2 
 3 void main(){
 4     int arr[] = {3,9,-1,10,-2};
 5     int temp = 0;
 6     for (int i = 0; i < 4; i++){
 7         if (arr[i]>arr[i+1]){
 8             temp = arr[i];
 9             arr[i] = arr[i+1];
10             arr[i+1] = temp;
11         }
12     }
13     
14 }

第二轮排序的代码只需要再加一个相同的for循环,更改i<4中的值,把4改为3即可,如此重复步骤直到i<1即可完成要求。

也可以嵌套一个循环,一部到位,如下(看不懂先理解上面的核心【即只有数值4在变,根据这一点就可以优化代码】):

 1 #include <stdio.h>
 2 #include <string.h>
 3 
 4 void main(){
 5     int arr[] = {3,9,-1,10,-2};
 6     int temp = 0;   //临时变量
 7     int len = sizeof(arr)/sizeof(int) -1;   //数组长度
 8     for(int j = 0; j<len ;j++){ //外部循环,决定进行几轮排序
 9 
10         for (int i = 0; i < len-j; i++){    //内部循环,排序核心代码
11             
12             if (arr[i]>arr[i+1]){
13                 temp = arr[i];
14                 arr[i] = arr[i+1];
15                 arr[i+1] = temp;
16             }
17         }
18     }
19     for (int i = 0; i < len+1; i++){
20         printf("%d,", arr[i]);
21     }
22 }

如果要从大到小,只需要修改if语句块里面的>改为<即可。

甚至你可以打包成一个函数随时调用!

 1 #include <stdio.h>
 2 #include <string.h>
 3 
 4 void bubble(int arr[], int len){
 5     int temp = 0;   //临时变量
 6     for(int j = 0; j<len ;j++){ //外部循环,决定进行几轮排序
 7 
 8         for (int i = 0; i < len-j; i++){    //内部循环,排序核心代码
 9             
10             if (arr[i]>arr[i+1]){
11                 temp = arr[i];
12                 arr[i] = arr[i+1];
13                 arr[i+1] = temp;
14             }
15         }
16     }
17     for (int i = 0; i < len+1; i++){
18         printf("%d,", arr[i]);
19     }
20 }
21 
22 void main(){
23     int arr1[] = {3,9,-1,10,-2};
24     int len = sizeof(arr1)/sizeof(int) -1;   //数组长度
25     bubble(arr1, len);
26 }

 

posted @ 2022-10-08 17:15  Morning枫  阅读(58)  评论(0)    收藏  举报