• 直接插入排序


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

             如果有一组数据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]

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

  • 相关阅读:
    Moo.fx 超级轻量级的 javascript 特效库
    Oracle 异常错误处理
    变被动为主动
    数据结构定义
    Redis 一个keyvalue存储系统 简介
    使用Container.ItemIndex获取Repeater、Gridview行的序号的简单方法
    ORACLE SQL:经典查询练手第一篇
    MongoDB 一个基于分布式文件存储的数据库
    dojo Quick Start/dojo入门手册面向对象,定义Class
    面向过程分析与面向对象分析之间的区别
  • 原文地址:https://www.cnblogs.com/tianyake/p/3668437.html
Copyright © 2020-2023  润新知