直接插入排序
直接插入排序的基本操作是將一個記錄插入到已經排好序的有序表中,從而得到一個新的、記錄數增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²)。
在記錄本身有序,或者記錄數比較少時,直接插入的優勢比較明顯