C語言中的幾種常見排序算法


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 }
View Code

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM