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 }