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

 

原文地址:https://www.cnblogs.com/wen2376/p/4303919.html