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 }