• 简单选择排序


     简单选择排序

     一、实现思想

      1、从无序区中比较得出一个最值

      2、将最值放到有序区

     二、代码实现

      

      注意要点

      1、交换始终在一个数组进行,为此我们需要知道无序区最值的索引,以便交换

      2、主要理解一下i、j就行

     1 /* 
     2 created by coderon
     3 time 2020年7月25日23:20:30
     4 简单选择排序
     5  */
     6 
     7 #include <stdio.h>
     8 void simple_sort(int *p, int length)
     9 {
    10     int i;     //有序区的长度
    11     int j;     //无序区的长度
    12     int index; //记录从无序区挑选出来的一个记录
    13     int temp;  //中间值,用于交换
    14     for (i = 0; i < length - 1; i++)
    15     {
    16         index = i;
    17         for (j = i + 1; j < length; j++)
    18         {
    19             if (p[j] < p[index]) //修改为>则抽出最大值,为降序排序
    20                 index = j;
    21         }
    22         temp = p[index];
    23         p[index] = p[i];
    24         p[i] = temp;
    25     }
    26 }
    27 int main(void)
    28 {
    29     int a[8] = {1, 2, 3, 4, 5, 6, 7, 8};
    30     simple_sort(a, 8);
    31     for (int i = 0; i < 8; i++)
    32     {
    33         printf("%d  ", a[i]);
    34     }
    35 }
    36 /* 
    37 输出
    38 ————————————————————————————————————————
    39 1  2  3  4  5  6  7  8  
    40 ————————————————————————————————————————
    41  */

     补充:另一种选择排序,效率差一点,有点像冒泡,但不是相邻两个交换,注意一下i、j的范围

    // 这种方法效率低一些,因为交换的次数太多了
    void simple_sort_2(int *p, int length)
    {
        int i;
        int j;
        int temp;
        for (i = 0; i < length; i++)
        {
            for (j = i + 1; j < length; j++)
                if (p[j] > p[i])
                {
                    temp = p[j];
                    p[j] = p[i];
                    p[i] = temp;
                }
        }
    }
  • 相关阅读:
    TCP与UDP的差别以及TCP三次握手、四次挥手
    MAC帧格式、IPV4数据报格式、TCP报文格式、UDP数据报格式
    维特比算法(Viterbi)-实例讲解(暴力破解+代码实现)
    对ajax的理解
    get与post两种方式的优缺点
    什么是Ajax和JSON,它们的优缺点
    浅谈一下如何避免用户多次点击造成的多次请求
    ajax是什么?
    同步和异步的区别?
    如何解决跨域问题
  • 原文地址:https://www.cnblogs.com/coderon/p/13378782.html
Copyright © 2020-2023  润新知