1、冒泡排序法:如果有N個數,兩兩相鄰進行比較,將最值沉入最后一位置,要進行N-1輪比較,
第一輪要比較N-1次,第2輪只要比較N-1-1次,因為第一次已經把最值沉入最后一位置,故
不需在進行比較一次,也就是說每一輪都減少一次,所以第2個for循環中j < n-i;下列代碼是升序排序
1 void bubble_sort(int *num, int n) 2 { 3 int num_temp; 4 for (int i=0; i<n; i++) 5 for (int j=0; j<n-i;j++) 6 { 7 if (num[j] > num[j+1]) 8 { 9 num_temp = num[j]; 10 num[j] = num[j+1]; 11 num[j+1] = num_temp; 12 } 13 } 14 }
2、選擇排序:每一輪循環中(也就是第2個for循環)只找到最小值的位置,但並不對數據進行交換,
待一輪結束后,判斷最小標志是否與當初假設的一樣,若不一樣,說明其他位置上更小(或大),
在對數據進行交換位置,每輪循環只交換一次數據。而冒泡排序中,第2個循環中,只要找到差
異值就會交換,一輪循環中要進行多次交換。因此冒泡排序比選擇排序更耗時。下面代碼是降序排序
1 void select_sort(int *num, int n) 2 { 3 int k_min; 4 int num_temp = 0; 5 6 for (int i=0; i<n-1; i++) 7 { 8 k_min = i; //假設第一個最小 9 for (int j=i+1; j<n; j++) 10 { 11 if (num[k_min] < num[j]) 12 { 13 k_min = j; 14 } 15 } 16 17 if (k_min != i) //數據交換 18 { 19 num_temp = num[i]; 20 num[i] = num[k_min]; 21 num[k_min] = num_temp; 22 } 23 } 24 }
整體代碼:

1 #include <iostream.h> 2 #define N 10 3 4 void bubble_sort(int *num, int n) 5 { 6 int num_temp; 7 for (int i=0; i<n; i++) 8 for (int j=0; j<n-i;j++) 9 { 10 if (num[j] > num[j+1]) 11 { 12 num_temp = num[j]; 13 num[j] = num[j+1]; 14 num[j+1] = num_temp; 15 } 16 } 17 } 18 19 void select_sort(int *num, int n) 20 { 21 int k_min; 22 int num_temp = 0; 23 24 for (int i=0; i<n-1; i++) 25 { 26 k_min = i; //假設第一個最小 27 for (int j=i+1; j<n; j++) 28 { 29 if (num[k_min] < num[j]) 30 { 31 k_min = j; 32 } 33 } 34 35 if (k_min != i) //數據交換 36 { 37 num_temp = num[i]; 38 num[i] = num[k_min]; 39 num[k_min] = num_temp; 40 } 41 } 42 } 43 44 int main() 45 { 46 int num[N] = {80,6,12,9,15,8,17,50,1,3}; 47 48 // bubble_sort(num,N); 49 select_sort(num,N); 50 51 for (int i=0; i<N; i++) 52 { 53 cout<<num[i]<<endl; 54 } 55 56 return 0; 57 }