zoukankan      html  css  js  c++  java
  • 直接插入排序

             直接排序是比较简单的一种排序方法,它排序的原理如下:

             如果有一组数据R[1…n],将这组数据分成二部分,一部分是已经排序过的数据,另一部分是未排序过。每次读无序区的第一个数据然后跟有序区的最后一个数据进行比较,比如说是按递增的话,那么无序的数小于有序的数,那么就将其保存在R[0]当中,然后不断的将有序区的数据往后移动,直到找到比他小的数。

    void InsertSort(SeqList &R, int n)

    {

        int i, j;

        for (i = 2; i <= n; i++)//扫描所有的数据

        {

            if (R[i].key < R[i - 1].key)//如果当前无序的第一个数比有序的最后一个数要大

            {

                R[0] = R[i];//将当前的无序数为哨兵

                for (j = i - 1; R[0].key<R[j].key; j--)//遍历有序区,直到找到比无序数要大为止

                    R[j + 1] = R[j];//如果没有找到那个数就一直向后移动一位

                R[j + 1] = R[0];//将无序数放在特定的位置上

            }

        }

    }

    排序过程

    初始关键字

    [50] [37 80 42 12 23 83 84 96 82]

    I=2

    R[0].key=37

    [37 50][80 42 12 23 83 84 96 82]

    I=3

    80

    [37 50 80][42 12 23 83 84 96 82]

    I=4

    42

    [37 42 50 80][12 23 83 84 96 82]

    I=5

    12

    [12 37 42 50 80][23 83 84 96 82]

    I=6

    23

    [12 23 37 42 50 80][83 84 96 82]

    I=7

    83

    [12 23 37 42 50 80 83][84 96 82]

    I=8

    84

    [12 23 37 42 50 80 83 84][96 82]

    I=9

    96

    [12 23 37 42 50 80 83 84 96][82]

    I=10

    82

    [12 23 37 42 50 80 82 83 84 96]

    通过上面的分析可以知道,当前后两个数相等时插入排序是不对其进行交换,如此可知道它是一个稳定的排序算法。

  • 相关阅读:
    此刻,很想那些老朋友
    985工程介绍
    211工程介绍
    蓝牙耳机声音断断续续
    不支持用淋浴洗澡
    在HY买饭
    成长路上的六个W
    屎、洗脚水
    Ubuntu更换软件源
    视频流媒体服务器RTMP和RTSP区别是什么?如何区分?
  • 原文地址:https://www.cnblogs.com/tianyake/p/3668437.html
Copyright © 2011-2022 走看看