冒泡排序算法代码
Posted socfans
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了冒泡排序算法代码相关的知识,希望对你有一定的参考价值。
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 }
以上是关于冒泡排序算法代码的主要内容,如果未能解决你的问题,请参考以下文章
算法漫游指北(第七篇):冒泡排序冒泡排序算法描述动图演示代码实现过程分析时间复杂度和选择排序算法描述动图演示代码实现过程分析时间复杂度