算法 - 排序 - 插入排序 (Insertion Sort)
返回上级:算法 - 查找与排序 (Searching and Sorting)
本文将用C++实现插入排序算法。
在查看本文之前,需要一些程序语言的基础。
常用插入排序:
-
直接插入排序 (Direct Insertion Sort) ;
-
折半插入排序 (Binary Insertion Sort) ,也称二分插入排序;
-
希尔排序 (Shell Sort) ,也称缩小增量排序 (Diminishing Increment Sort) 。
所有排序方法中,统一使用如下库与结构:
// Author: https://blog.csdn.net/DarkRabbit
// Sorted Dependency
#pragma once
#include <algorithm>
#include <vector>
#include <stack>
template<typename T>
struct MyItem
{
int key;
T data;
MyItem(){
key = -1; }
MyItem(const int& k) : key(k){
}
MyItem(const int& k, const T& d) : key(k), data(d){
}
};
数据表统一使用了std::vector<MyItem<T>>
,如果你使用静态数组MyItem<T>[]
或指针数组MyItem<T>*
,那么还要传入元素数量size
。
示例所用数据:
-
元素数量为
size = 15
; -
关键字为
key = { 123, 122, 565, 22, 3, 64, 73, 44, 287, 6, 9, 83, 25, 42, 13 }
。
文章目录
1 插入排序简述 (Introduction)
插入排序基本思想:把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中,直到所有的记录插入完为止,得到一个新的有序序列。
常用插入排序:
-
直接插入排序 (Direct Insertion Sort) ;
-
折半插入排序 (Binary Insertion Sort) ,又称二分插入排序;
-
希尔排序 (Shell Sort) ,又称缩小增量排序 (Diminishing Increment Sort) 。
折半插入排序与直接插入排序只是在寻找位置有所不同,这是因为前面的元素已经排过序了。
折半插入排序再插入第 i 个元素时,需要经过 ⌈ log 2 i ⌉ + 1 \lceil \log_2i \rceil + 1 ⌈log2