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 }