冒泡法排序

冒泡排序:
===================================================================================
案例:
分析:
第一轮排序的代码:
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 }