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]

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

  • 相关阅读:
    java Math类方法使用
    线性逻辑回归与非线性逻辑回归pytorch+sklearn
    Java学习方向
    ubuntu16.04安装Anaconda+Pycharm+Pytorch
    迁移学习resnet
    简单的CNN图像分类datasets.MNIST/FashionMNIST
    pytorch学习2
    tools/build.c
    zBoot/Makefile
    tools/version.c
  • 原文地址:https://www.cnblogs.com/tianyake/p/3668437.html
Copyright © 2011-2022 走看看