資料結構和演算法系列8 七大排序之歸併排序

2021-06-22 11:06:26 字數 2737 閱讀 5860

這一篇要總結的是歸併排序演算法,這也是七大排序的最後一種排序演算法。

首先來看一下歸併排序(merge sort)的基本原理。它的原理是假設初始序列有n個記錄,則可以看成是n個有序的子串行,每個子串行的長度為1,然後兩兩合併,得到n/2個長度為2或1的有序子串行;再兩兩歸併,… … ,如此重複,直至得到乙個長度為n的有序序列為止,這兩排序方法就稱為歸併排序。

下面以一張圖來說明歸併排序的資料交換過程:

c#版實現**:

namespace

mergesort.csharp

; console.writeline(

"********************歸併排序********************");

console.writeline(

"排序前:");

display(array);

mergesort(array,

newint[array.length], 0, array.length - 1

); console.writeline(

"排序後:");

display(array);

console.readkey();

}//////

歸併排序演算法

/// ///

待排序的陣列

///臨時陣列

///列表開始位置

///列表結束位置

public

static

void mergesort(int array, int temparray, int head, int

rear)

}//////

合併操作(列表的兩兩合併)

/// ///

//////

//////

public

static

void merge(int array, int temparray, int head, int middle, int

rear)

//判斷左序列是否結束

while (head <=headend)

temparray[tempindex++] = array[head++];

//判斷右序列是否結束

while (rearstart <=rear)

temparray[tempindex++] = array[rearstart++];

//交換資料

for (int i = 0; i < templength; i++)

}private

static

void display(ilistlist)

", item);}}

console.writeline(

"\n**********展示完畢**********\n");}}

}

程式輸出結果為:

c語言版:

/*

包含標頭檔案

*/#include

"stdio.h

"#include

"stdlib.h

"#include

"io.h

"#include

"math.h

"#include

"time.h

"#define ok 1

#define error 0

#define true 1

#define false 0

#define maxsize 100typedef

intstatus;

typedef

struct

seqlist;

/*將有序的sr[i..m]和sr[m+1..n]歸併為有序的tr[i..n]

*/void merge(int sr,int tr,int i,int m,int

n)

if(i<=m)

if(j<=n)

}/*歸併排序演算法

*/void msort(int sr,int tr1,int s, intt)}

/*對順序表l作歸併排序

*/void mergesort(seqlist *seqlist)

/*列印結果

*/void display(seqlist *seqlist)

printf(

"\n**********展示完畢**********\n");

}#define n 9

void

main()

;

for (i=0;i)

seqlist.length=n;

printf(

"***************歸併排序***************\n");

printf(

"排序前:");

display(&seqlist);

mergesort(&seqlist);

printf(

"\n排序後:");

display(&seqlist);

getchar();

}

輸出結果同上。

資料結構和演算法系列8 七大排序之歸併排序

這一篇要總結的是歸併排序演算法,這也是七大排序的最後一種排序演算法。首先來看一下歸併排序 merge sort 的基本原理。它的原理是假設初始序列有n個記錄,則可以看成是n個有序的子串行,每個子串行的長度為1,然後兩兩合併,得到n 2個長度為2或1的有序子串行 再兩兩歸併,如此重複,直至得到乙個長度...

資料結構和演算法 七大排序演算法實現

七大排序演算法實現 include using namespace std void swap int num1,int num2 1.選擇排序演算法 bool selectionsort int arr,int len if max len i 1 return true 2.氣泡排序演算法 bo...

資料結構 七大排序演算法總結

面試中,無論是問還是寫,排序被問到的次數總是很多。總結一些八大排序演算法。插入,希爾,選擇,堆 冒泡,快速 歸併 排序方法 初始序列有無影響 最好情況 最壞情況 插入排序 有正序有序這樣只需要比較n次,不需要移動。因此時間複雜度為o n 逆序有序這樣每乙個元素就需要比較n次,共有n個元素,因此實際複...