冒泡排序算法代碼


 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 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM