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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

插入排序,希尔排序

發布時間:2025/3/21 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 插入排序,希尔排序 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
從剛開始本科學習數據結構的時候,對希爾排序就一直稀里糊涂的,弄不清到底怎么回事 ,重溫知識,對此才稍加了解,希爾排序就是插入排序,不過它對插入排序進行了一些優化,我們 之道,插入排序的性能與初始序列的排序狀況有關,假設需要的排序效果是從小到達,如果給定的 序列原本就是有序的,那么排序的時候只需遍歷一遍數組就可以了;但是,如果給定的序列原本是 逆序的,必須 5 4 3 2 1,那么對數組的中的數據(注意,這里是數據,而非數組)掃描的次數 大約是(5+4+3+2+1)次,也就是說如果給定n個數據,排序的時間復雜度是O(n^2),所以,插入 排序對于具有“良好有序性”的序列(也就是說序列不是逆序的)來說,其排序效果還是不錯的; 但是對于純逆序的序列來說,排序效果就不是那么好了,這時候,希爾排序的優化效果就體現出來了, 它的思想是這樣的:先對局部序列進行數次插入排序,這樣可以使整體序列趨于有序,最后對整體 序列進行插入排序,就可以得到有序的序列。 時間復雜度 空間復雜度 插入排序 O(N^2) O(1) 希爾排序 O(N^1.3)~O(N^2) O(1) #include<stdio.h>void insert(int arr[], int n) {for (int i = 1; i < n; i++) //2~N依次插入{//查找插入位置int pos = -1;for (int j = i - 1; j >= 0 ; j--) //依次遍歷每一個數{if (arr[j] > arr[i]){pos = j;}}if (pos >= 0){//進行后移int key = arr[i];for (int k = i - 1; k >= pos; k--)arr[k + 1] = arr[k];arr[pos] = key;}} }void ShellSort(int arr[], int n) {for (int step = 5; step >= 1; step -= 2){for (int i = step; i < n; i = i+step) //2~N依次插入0+step~n{//查找插入位置int pos = -1;for (int j = i - step; j >= 0; j -= step) //依次遍歷每一個數{if (arr[j] > arr[i]){pos = j;}}if (pos >= 0){//進行后移int key = arr[i];for (int k = i - step; k >= pos; k-=step)arr[k + step] = arr[k];arr[pos] = key;}}}}int main() {int arr[] = { 7, 61, 41, 8, 9, 3, 2 };int length = sizeof(arr) / sizeof(arr[0]);ShellSort(arr, length);for (int i = 0; i < length; i++)printf("%5d", arr[i]);printf("\n"); }

總結

以上是生活随笔為你收集整理的插入排序,希尔排序的全部內容,希望文章能夠幫你解決所遇到的問題。

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