插入排序(动图演示,思路详解,代码展示)
生活随笔
收集整理的這篇文章主要介紹了
插入排序(动图演示,思路详解,代码展示)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
?一.插入排序
(一).基本思想
? ? ? ?把待排序的的幾個值按照順序逐個插入到一個已經排好序的有序序列中,直到所有值插入完成,得到一個新的有序序列.
(二).舉例
?(三).動圖演示
1.全過程動圖演示
?
?
2.一趟過程演示:
數組中有4,2,6,5,0
假設前四個元素已經排好序2,4,5,6,現在要把數組中的最后一個元素0插入進去
(四).代碼實現
以升序為例:
注意:寫插入排序時應該充分考慮到邊界條件(for循環結束條件)和極端情況
思路:
1.先寫一趟的排序過程(假設前end個元素已經排好序了,把第end+1個元素插入進去)
2.再給外面加個for循環,即可實現多趟插入排序,進而完成整個排序
void PrintArray(int* a, int n) //打印函數,用來打印數組中的元素,驗證程序運行結果是否正確 {for (int i = 0; i < n; ++i){printf("%d ", a[i]);}printf("\n"); } void InsertSort(int* a, int n) {for (int i = 0; i < n - 1; ++i)//為什么i<n-1而不是i<n,因為end+1才是待排序的那個元素//end+1 < n 等價于 end < n-1{//[0,end]有序,把end+1位置的值插入,保持有序int end = i;int tmp = a[end + 1];while (end >= 0){if (tmp < a[end])//升序{a[end + 1] = a[end];--end;}else{break;}}a[end + 1] = tmp;} } void TestInsertSort()//測試插入排序 {int a[] = { 9,2,1,4,7,5,3,8,6 };InsertSort(a, sizeof(a) / sizeof(int));PrintArray(a, sizeof(a) / sizeof(int)); } int main() {TestInsertSort();return 0; }(五).復雜度分析
時間復雜度為O(N^2)
最優:O(N)? ? ? ? ? ? ? ? ? ?按順序排或者接近有序? ? ? 1,2,3,4,5,6,8,7,9
最壞;O(N^2)? ? ? ? ? ? ? ?完全逆序? ? ? ? ? ? ? ? ? ? ? ? ? ? 9,8,7,6,5,4,3,2,1
顯然我們可以看出,插入排序在數組接近有序時,效率非常高,為O(N)
這樣,就引出了下節我們要討論的希爾排序.
總結
以上是生活随笔為你收集整理的插入排序(动图演示,思路详解,代码展示)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【标准】:ISO26262
- 下一篇: 浅谈小游戏是如何一步步抓住用户心理的