冒泡排序算法代码
程序员文章站
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 }