一、什么是插入排序
插入排序通俗来讲就是往一个已经排好序的序列中插入一个元素。在插入的过程中从序列尾部开始,一直往前比较,直到找到合适的位置才停止比较,最终将元素插入,可以从下图理解。
二、for循环实现插入排序
// 最好时间复杂度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; }}
三、递归实现插入排序
抓住前K-1个元素插入第K个元素即可
//递归实现插入排序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; }}