冒泡排序算法代码

 1 void vBubbleSort(int arr[], int len){
 2     int i, j, temp;
 3     for (j = 0; j < len - 1; j++){            //每次最大元素就像气泡一样"浮"到数组的最后
 4         for (i = 0; i < len - 1 - j; i++){    //依次比较相邻的两个元素,使较大的那个向后移
 5             if(arr[i] > arr[i + 1]){            //交换两个数
 6                 temp = arr[i];
 7                 arr[i] = arr[i + 1];
 8                 arr[i + 1] = temp;
 9             }
10         }
11     }
12 }
13 void vBubbleSortChange(int arr[], int len){
14     int i,j,temp;
15     int swapped = 1;
16     for (j = 0; swapped; j++){            //每次最大元素就像气泡一样"浮"到数组的最后
17         swapped = 0;
18         for (i = 0; i < len - 1 - j; i++){    //依次比较相邻的两个元素,使较大的那个向后移
19             if(arr[i] > arr[i + 1]){            //交换两个数
20                 temp = arr[i];
21                 arr[i] = arr[i + 1];
22                 arr[i + 1] = temp;
23                 swapped = 1;
24             }
25         }
26 //        if(    swapped == 0) {j = len-1;}//如果没有元素交换,说明序列是顺序的,退出循环
27     }
28 }
29 void vCockTailSort(int arr[],int len){
30     int tmp,i,left=0,right = len-1;
31     while(left < right){
32         for(i=left;i<right;i++){//正向冒泡,确定最大值
33             if(arr[i]>arr[i+1]){
34                 tmp = arr[i];
35                 arr[i] = arr[i+1];
36                 arr[i+1] = tmp;
37             }
38         }
39         right--;
40         for(i=right;i>left;i--){//反向冒泡,确定最小值
41             if(arr[i]<arr[i-1]){
42                 tmp = arr[i];
43                 arr[i] = arr[i-1];
44                 arr[i-1] = tmp;
45             }
46         }
47         left++;
48     }
49 }
50 void vCockTailSortChange(int arr[],int len){
51     int tmp,i,left=0,right = len-1;
52     int swapped = 1;
53     int bound = 0;//记录某趟遍历的最后一次交换元素的位置,优化减少循环次数
54     while(swapped){//如果没有元素交换,说明序列是顺序的
55         swapped = 0;
56         for(i=left;i<right;i++){//正向冒泡,确定最大值
57             if(arr[i]>arr[i+1]){
58                 tmp = arr[i];
59                 arr[i] = arr[i+1];
60                 arr[i+1] = tmp;
61                 swapped = 1;
62                 bound = i;
63             }
64         }
65         right=bound;//缩小遍历边界
66         for(i=right;i>left;i--){//反向冒泡,确定最小值
67             if(arr[i]<arr[i-1]){
68                 tmp = arr[i];
69                 arr[i] = arr[i-1];
70                 arr[i-1] = tmp;
71                 swapped = 1;
72                 bound = i;
73             }
74         }
75         left=bound;//缩小遍历边界
76     }
77 }

猜你喜欢

转载自www.cnblogs.com/SocFans/p/9090823.html