• 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

     

  • 相关阅读:
    第40次全国计算机等级考试监考
    [再寄小读者之数学篇](2014-07-27 打印错误吧)
    日积月累的名典[2014-10-7]
    2014年全球“高被引科学家”数学类名单
    年轻尼姑的19句话
    PostgreSQL的 initdb 源代码分析之十六
    PostgreSQL的 initdb 源代码分析之十五
    PostgreSQL的 initdb 源代码分析之十四
    PostgreSQL的 initdb 源代码分析之十三
    PostgreSQL的 initdb 源代码分析之十二
  • 原文地址:https://www.cnblogs.com/wen2376/p/4303919.html
Copyright © 2020-2023  润新知