欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

冒泡排序算法代码

程序员文章站 2022-03-20 15:31:38
1 void vBubbleSort(int arr[], int len){ 2 int i, j, temp; 3 for (j = 0; j arr[i + 1]){ //交换两个数 6 temp = arr[i]; 7 arr[i] = arr[i + 1]; 8 ... ......
 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 }