C语言之直接插入排序

Posted 遇见杉凡

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言之直接插入排序相关的知识,希望对你有一定的参考价值。

1概念

直接插入排序(Straight Insertion Sort)是一种最简单的排序方法,其基本操作是将一条记录插入到已排好的有序表中,从而得到一个新的、记录数量增1的有序表。


2基本思想

假设需要排序的元素存放在R[1...n]中,初始时,R[1]自成一个有序区域,无序区域为R[2...n],从i=2起至i=n为止,依次将R[i]插入到当前有序区域R[1...i-1]中,生成包含n个元素的有序区。

首先在当前有序区R[1..i-1]中查找R[i]的正确插入位置j(1≤j≤i-1);然后将R[j...i-1]中的记录均后移一个位置,腾出j位置上的空间插入R[i]。


3核心代码


void insert_sort(int data[], int size) {
    int i, j, temp;

    // 遍历size-1次 
    for (int i = 1; i < size; i++) {
        // 取出当前位置i需要遍历比较的元素 
        temp = data[i];

        // 从数组下标i-1至0逆向开始遍历比较
        for (j = i-1; j >=0 && temp < data[j]; j--) {
            /* 若前面取出的元素小于当前遍历的元素
               将当前元素位置向后移动一位 
            */
 
            data[j+1] = data[j];
        } 

        /* 当无元素移动时,取出的元素放回下标为i的位置 
           当有元素移动时,取出的元素放置于前面腾出的j位置,此时应该是j+1 
        */

        data[j+1] = temp; 
    }
}


4验证结果




以上是关于C语言之直接插入排序的主要内容,如果未能解决你的问题,请参考以下文章

C语言试题八十九之实现插入排序算法

C语言试题八十九之实现插入排序算法

c语言之插入排序选择 排序

C语言之希尔排序

排序算法之直接插入排序

C语言求助,把一个数插入到一个已排好序的数组中