[轉載] 《算法導論》
[轉載] http://blog.sina.com.cn/s/blog_6d677b680100s3hh.html
1、插入排序的思想
2、插入排序的實現
void insert_sort(int *a,int n)
{
int i,j,key;
for(i=1;i<n;i++)//控制需要插入的元素
{
key=a[i]; //key爲要插入的元素
for(j=i;j>0 && a[j-1]>key;j--) //查找要插入的位置,循環結束,則找到插入位置
a[j] = a[j-1]; //移動元素的位置.供要插入元素使用
a[j] = key; //插入需要插入的元素
}
}
2、插入排序的性能
1)、時間複雜度
最差時間複雜度爲 O(n^2)。當數據是逆序的,比較次數和交換次數都是1+2+3+…i+…(n-1),即n*(n-1)/2。
最好時間複雜度是O(n)。當數據是已經排好序的,這時內層的for檢測總是判定不成立的。
平均時間複雜度爲 O(n^2)。因爲平均時間複雜度接近於最差時間複雜度。
2)、穩定性
插入排序是穩定的排序算法。因爲它是從右往左找合適的(不大於它)位置,再進行插入,所以即便有兩個相等的元素,經過排序,前後還關係依舊維持。
和其它層算法的比較:
插入排序和冒泡排序都是穩定的排序。