直接插入排序
直接插入排序的基本操作是将一个记录插入到已经排好序的有序表中,从而得到一个新的、记录数增1的有序表。
完整代码 :
#include <stdio.h>
void InsertSort(int arr[],int len)
{
int i = 1;
int temp;
int j;
for(i;i < len;i++)
{
temp = arr[i];
for(j = i-1;j >= 0 && arr[j] > temp;j--)
{
arr[j + 1] = arr[j];
}
arr[j+1] = temp;
}
}
void Show(int arr[],int len)
{
for(int i = 0;i < len;i++)
{
printf("%d ",arr[i]);
}
}
int main()
{
int arr[] = {87,8,59,24,9};
int len = sizeof(arr)/sizeof(arr[0]);
InsertSort(arr,len);
Show(arr,len);
}
时间复杂度分析
首先直接插入排序是一个稳定的排序算法;当最好的情况,也就是排序本身是有序的,共需比较n-1次,因为没有移动的记录,时间复杂度为O(n)。当最坏的情况,即排序表是逆序的情况,时间复杂为O(n²)。
在记录本身有序,或者记录数比较少时,直接插入的优势比较明显