常用算法简述 -- 插入排序

一、插入排序的原理

插入排序(英语:Insertion Sort)是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常采用in-place排序(即只需用到O(1)O(1)的额外空间的排序),因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素腾出空间。

下面是插入排序的示例动画:
常用算法简述 -- 插入排序_第1张图片

二、C++代码实现

// 功能:实现对int数组按升序排序
// 参数:
//   data: int数组
//      n: 数组元素的个数
// 返回值:
//   无
//
void InsertionSort(int data[], int n) {
    for (int i = 1; i < n; i++) { // 假定第一个元素为已排序序列,所以下标从1开始
        int temp = data[i];

        int j = i; // j表示腾出的位置

        // 因为依次和前一个元素比较,所以是j > 0,而不是j >= 0。
        // 从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素腾出位置
        for (; j > 0; j--) { 
            if (data[j - 1] > temp) {
                data[j] = data[j - 1];
            }
            else {
                break;
            }
        }

        if(j != i)
            data[j] = temp;
    }
}

你可能感兴趣的:(常用算法简述 -- 插入排序)