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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

数据结构(七)排序---直接插入排序(稳定)

發布時間:2023/12/1 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据结构(七)排序---直接插入排序(稳定) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

經典排序算法----直接插入排序算法及其改進(穩定)

定義:

直接插入排序的基本操作是將一個記錄插入到已經排好序的有序表中,從而得到一個新的,記錄數加一的有序表。

實現思想

我們預留了一個哨兵,這里我們將用到它來保存一個臨時值 插入排序是在一個已經有序的小序列的基礎上,一次插入一個元素。當然,剛開始這個有序的小序列只有1個元素,就是第一個元素。比較是從有序序列的末尾開始,也就是想要插入的元素和已經有序的最大者開始比起,如果比它大則直接插入在其后面,否則一直往前找直到找到它該插入的位置。如果碰見一個和插入元素相等的,那么插入元素把想插入的元素放在相等元素的后面。 所以,相等元素的前后順序沒有改變,從原無序序列出去的順序就是排好序后的順序,所以插入排序是穩定的。

基本思想

每次將一個待排序的記錄,按其關鍵字大小插入到前面已經排好序的子序列中的適當位置,直到全部記錄插入完成為止。

代碼實現

void InsertSort(SqList *L) {int i, j, count1, count2;count2 = count1 = 0;for (i = 2; i <= L->length;i++){if (L->r[i]<L->r[i-1]) //若是前面第一個都不滿足順序,那么我們就要去循環 {L->r[0] = L->r[i];for (j = i - 1; L->r[j]>L->r[0]; j--) //將大的數據全部向后移動,從后向前防止數據覆蓋 {count1++;L->r[j + 1] = L->r[j]; //記錄后移 }L->r[j + 1] = L->r[0]; //插入到正確位置count2++;}}printf("loop move count:%d, swap insert count:%d\n", count1, count2); }

性能分析

空間上只需要一個記錄輔助空間,所以關鍵看時間復雜度 平均比較和移動次數約為(n^2)/4,所以時間復雜度為O(n^2)。 其性能要比冒泡和簡單選擇排序好些

?

轉載于:https://www.cnblogs.com/ssyfj/p/9510735.html

總結

以上是生活随笔為你收集整理的数据结构(七)排序---直接插入排序(稳定)的全部內容,希望文章能夠幫你解決所遇到的問題。

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