日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

插入排序(动图演示,思路详解,代码展示)

發布時間:2024/1/18 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 插入排序(动图演示,思路详解,代码展示) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?一.插入排序

(一).基本思想

? ? ? ?把待排序的的幾個值按照順序逐個插入到一個已經排好序的有序序列中,直到所有值插入完成,得到一個新的有序序列.

(二).舉例

?(三).動圖演示

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)

這樣,就引出了下節我們要討論的希爾排序.

總結

以上是生活随笔為你收集整理的插入排序(动图演示,思路详解,代码展示)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。