- 什么是插入排序
插入排序通俗来讲就是往一个已经排好序的序列中插入一个元素。在插入的过程中从序列尾部开始,一直往前比较,直到找到合适的位置才停止比较,最终将元素插入,可以从下图理解。
- 插入排序的非递归实现
// 最好时间复杂度O(n)
// 最坏时间复杂度O(n^2)
void insertSort(int A[], int len) {
for (int i = 1; i < len; i++)
{
int iNum = A[i];
int j = i ;
while (j - 1 >= 0 && A[j - 1] < iNum) // 从后往前比较的过程
{
A[j] = A[j - 1];
j--;
}
A[j] = iNum;
}
}
- 插入排序的递归实现
//递归实现插入排序
// 最坏时间复杂度O(n^2)
void insertSortRecurrent(int A[], int len) {
if (len > 1) // 当len为1时不用排序,只有一个数
{
insertSortRecurrent( A, len -1); //排好前 len - 1个数, 即A[0...(len - 2)] 已经有序
//往前插入第len个数
int cNum = A[len - 1];
int j = len - 1;
while (j - 1 >= 0 && A[j - 1] > cNum)
{
A[j] = A[j - 1];
j--;
}
A[j] = cNum;
}
}