什麼是歸併排序,什麼叫歸併演算法?

時間 2022-09-03 18:00:12

1樓:匿名使用者

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

#include

int a[1000],s[1000];

int mergesort(int a,int l,int r)while(p1<=mid)a[p++]=s[p1++];

while(p2 <= r)a[p++]=s[p2++];

}int main()

for(i=1;i<=n;i++)

mergesort(a,1,n);

for(i=1;i<=n;i++)

printf("\n");

system("pause");

return 0;

2樓:

hadoop1.2.1 mapreduce中的歸併排序是什麼意思

3樓:個人的一樣

:(partition)分割槽出現的必要性,如何使用hadoop產生一個全域性排序的檔案?最簡單的方法就是使用一個分割槽,但是該方法在處理大型檔案時效率極低,因為一臺機器必須處理所有輸出檔案,從而完全喪失了mapreduce所提供的並行架構的優勢。

什麼叫歸併演算法?

4樓:匿名使用者

合併排序(merge sort)是又一類不同的排序方法,合併的含義就是將兩個或兩個以上的有序資料序列合併成一個新的有序資料序列,因此它又叫歸併演算法。它的基本思想就是假設陣列a有n個元素,那麼可以看成陣列a是又n個有序的子序列組成,每個子序列的長度為1,然後再兩兩合併,得到了一個 n/2 個長度為2或1的有序子序列,再兩兩合併,如此重複,值得得到一個長度為n的有序資料序列為止,這種排序方法稱為2—路合併排序。

例如陣列a有7個資料,分別是: 49 38 65 97 76 13 27,那麼採用歸併排序演算法的操作過程如圖7所示:

初始值 [49] [38] [65] [97] [76] [13] [27]

看成由長度為1的7個子序列組成

第一次合併之後 [38 49] [65 97] [13 76] [27]

看成由長度為1或2的4個子序列組成

第二次合併之後 [38 49 65 97] [13 27 76]

看成由長度為4或3的2個子序列組成

第三次合併之後 [13 27 38 49 65 76 97]

合併演算法的核心操作就是將一維陣列中前後相鄰的兩個兩個有序序列合併成一個有序序列。合併演算法也可以採用遞迴演算法來實現,形式上較為簡單,但實用性很差。合併演算法的合併次數是一個非常重要的量,根據計算當陣列中有3到4個元素時,合併次數是2次,當有5到8個元素時,合併次數是3次,當有9到16個元素時,合併次數是4次,按照這一規律,當有n個子序列時可以推斷出合併的次數是x(2 >=n,符合此條件的最小那個x)。

其時間複雜度為:o(nlogn).所需輔助儲存空間為:o(n)

歸併演算法如下:

long merge(long *a,long p,long q,long r)

else }

free(l);

free(r);

return 0;

} long mergesort(long *a,long p,long r)

return 0;}

歸併排序演算法!哪位演算法大牛來幫我看看這個程式吧!看了一天了就是不知道有什麼問題,無法排序....

5樓:匿名使用者

有幾個地方錯了,現改正如下

#include"iostream"

using namespace std;

int main()

;//0-1,2-2

int b[5];

int s=0;

int t=4;

void mergesort(int r[ ], int r1[ ], int l, int h) ;

mergesort(a,b,s,t);

for( int i=0 ; i<=4 ; i++)cout< r,b -> r1 , s -> l,t -> h}

什麼時候用歸併排序,什麼時候用快速排序

6樓:匿名使用者

記憶體空間不足的時候使用歸併排序,能夠使用平行計算的時候使用歸併排序。

對時間複雜度o(nlogn)依然不滿意的情況下使用快速排序。

7樓:杭幻梅吉名

總體上是快排

詳細的說:

若資料比較無序,快排快。

若資料中部分有序,歸併快。

建議你使用快排,因為就算歸併快,也快不了多少。而快排能處理更多情況。

什麼是插入排序;交換排序;選擇排序;歸併排序;基數排序;外排序? 哪種排序方法好?

8樓:

插入排序:

有一個已經有序的資料序列,要求在這個已經排好的資料序列中插入一個數,但要求插入後此資料序列仍然有序,這個時候就要用到一種新的排序方法——插入排序法,插入排序的基本操作就是將一個資料插入到已經排好序的有序資料中,從而得到一個新的、個數加一的有序資料,演算法適用於少量資料的排序,時間複雜度為⊙(㎡)。是穩定的排序方法。

插入演算法(insertion sort)把要排序的陣列分成兩部分:第一部分包含了這個陣列的所有元素,但將最後一個元素除外,而第二部分就只包含這一個元素。在第一部分排序後,再把這個最後元素插入到此刻已是有序的第一部分裡的正確位置中。

包括:直接插入排序,折半插入排序,連結串列插入排序,shell排序

交換排序:

所謂交換,就是根據序列中兩個記錄鍵值的比較結果來對換這兩個記錄在序列中的位置,交換排序的特點是:將鍵值較大的記錄向序列的尾部移動,鍵值較小的記錄向序列的前部移動。

選擇排序:

每一趟從待排序的資料元素中選出最小(或最大)的一個元素,順序放在已排好序的數列的最後,直到全部待排序的資料元素排完。

選擇排序是不穩定的排序方法。

歸併排序:

歸併排序是多次將兩個或兩個以上的有序表合併成一個新的有序表。最簡單的歸併是直接將兩個有序的子表合併成一個有序的表。

在內部排序中,通常採用的是2-路歸併排序。即:將兩個位置相鄰的記錄有序子序列歸併為一個記錄的有序序列。

每一趟歸併的時間複雜度為 o(n)

基數排序:

「基數排序法」(radix sort)則是屬於「分配式排序」(distribution sort),基數排序法又稱「桶子法」(bucket sort)或bin sort,顧名思義,它是透過鍵值的部份資訊,將要排序的元素分配至某些「桶」中,藉以達到排序的作用,基數排序法是屬於穩定性的排序,其時間複雜度為o (nlog(r)m),其中r為所採取的基數,而m為堆數,在某些時候,基數排序法的效率高於其它的比較性排序法。

解法 基數排序的方式可以採用lsd(least significant digital)或msd(most significant digital),lsd的排序方式由鍵值的最右邊開始,而msd則相反,由鍵值的最左邊開始。

外排序:

若排序的檔案存入外儲存器排序過程藉助內外存資料交換(或歸併)來完成,則稱這種排序為外排序。

一般地,外排序的時間由三部分組成:

(1) 預處理時間;

(2) 內部合併的時間;

(3) 外存讀/寫記錄的時間。望參考

請問EXCEL中排序是按什麼排序的啊?怎麼判定升序還是降序啊

潛龍毋庸 工具欄上的排序按鈕有兩個,標著a z的就是升序,相反地就是降序。預設的排序方法是 數字按其值大小,文字按拼音順序,英文按字母順序。如果希望設定排序方法和規則,或者需要按照多個排序關鍵字排序,可以彈出自定義排序對話方塊中設定。 親 這個你可以自己選擇的選中你要排序的表除去表頭哦 然後排序 有...

程式設計師演算法是幹什麼的,程式設計中的演算法是指什麼?

計算機程式設計師的工作內容有 1 負責軟體專案的詳細設計 編碼和內部測試的組織實施 2 協助專案經理和相關人員同客戶進行溝通 3 參與需求調研 專案可行性分析 技術可行性分析和需求分析 4 熟練掌握交付軟體部開發的軟體專案的相關軟體技術 5 負責相關技術文件的擬訂。計算機程式設計師的招聘條件是 1 ...

什麼是演算法初步,數學必修3中演算法初步的內容有什麼聯絡

文庫精選 內容來自使用者 天道酬勤能補拙 演算法初步 考綱要求 演算法的含義 程式框圖 瞭解演算法的含義,瞭解演算法的思想 理解程式框圖的三種基本邏輯結構 順序 條件分支 迴圈.基本演算法語句 理解幾種基本演算法語句 輸入語句 輸出語句 賦值語句 條件語句 迴圈語句的含義.教材複習演算法的定義 在數...