C 程式設計之經典演算法 排序(十)

2021-05-26 01:45:30 字數 509 閱讀 2226

歸併排序(mergesort)

歸併(merge)排序法是將兩個(或兩個以上)有序表合併成乙個新的有序表,即把待排序序列分為若干個子串行,每個子串行是有序的。然後再把有序子串行合併為整體有序序列。

歸併排序是建立在歸併操作上的一種有效的排序演算法。該演算法是採用分治法(divide and conquer)的乙個非常典型的應用。

將已有序的子串行合併,得到完全有序的序列;即先使每個子串行有序,再使子串行段間有序。若將兩個有序表合併成乙個有序表,稱為2-路歸併。

歸併操作的工作原理如下:

申請空間,使其大小為兩個已經排序序列之和,該空間用來存放合併後的序列

設定兩個索引,最初位置分別為兩個已經排序序列的起始位置

比較兩個索引所指向的元素,選擇相對小的元素放入到合併空間,並移動索引到下一位置

重複步驟3直到某一索引達到序列尾

將另一串行剩下的所有元素直接複製到合併序列尾

2路歸併示例

C 程式設計之經典演算法 遞迴過程(四)

揹包問題 knapsack problem 揹包問題是一種組合優化的np完全問題 問題可以描述為 給定一組物品,每種物品都有自己的重量和 在限定的總重量內,我們如何選擇,才能使得物品的總 最高。問題的名稱 於如何選擇最合適的物品放置於給定揹包中。相似問題經常出現在商業 組合數學,計算複雜性理論 密碼...

經典排序演算法C

氣泡排序 依次比較相鄰的兩個元素,如果前者大於後者,則交換順序。第一趟完成後最後的元素是最大的,然後針對所有的元素重複以上的步驟,除了最後乙個。時間複雜度n 2 void bubblesort vector arr 選擇排序 在序列中,找到最小元素,放到序列的起始位置作為已排序序列 然後,再從剩餘未...

十大經典排序演算法(十 基數排序)

基數排序是一種非比較型整數排序演算法,其原理是將整數按位數切割成不同的數字,然後按每個位數分別比較。基數排序有兩種方法 這三種排序演算法都利用了桶的概念,但對桶的使用方法上有明顯差異 1 ar counter 2function radixsort arr,maxdigit 11counter bu...