一.直接插入排序的基本思想
直接插入排序(insert sorting)的基本思想就是:
当插入第i个元素时,假设前i-1项有序,那么将第i项与前i-1项进行比较,找到合适的插入位置后,将原来位置上的元素向后移动,然后将其插入。
具体的图示参见《数据结构》,这里不再赘述
二.代码实现
#include"sort.h"
void InsertSort(SeqList<int> &L, int n)
{
int temp = 0;
for(int i=1; i<=n; ++i)
{
if(L[i] < L[i-1])
{
temp = L[i];
int j = i-1;
do
{
L[j+1] = L[j];
j--;
}while(j>=0 && temp < L[j]);
L[j+1] = temp;
}
}
}
三.总结
直接插入的时间复杂度是O(n^2),是一种稳定的排序方法,由于只需要一个临时变量,空间复杂度是O(1);对于小数据量的处理,可以选用它,最好的情况下数据有序,直接插入只需要n-1次的比较,0次移动;但是最坏的情况下,需要n(n-1)/2次的比较,(n-1)(n+4)/2的移动。
直接插入排序属于简单排序