這一篇要總結的是歸併排序演算法,這也是七大排序的最後一種排序演算法。
首先來看一下歸併排序(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個元素,因此實際複...