歸併排序(遞迴與非遞迴寫法)

2022-06-03 20:48:08 字數 2175 閱讀 2492

本文同步發布在csdn:

歸併排序的基本操作是將兩個有序陣列合併成乙個有序陣列,原理是運用分治思想,遞迴地將乙個陣列的左右兩部分有序數列進行歸併。

c/c++的遞迴實現:

1

: 遞迴寫法2//

34 #include 5 #include 6

#define elementtype int//

自定義資料型別

7using

namespace

std;89

void mergesort(elementtype a, int n);//

n為陣列大小,統一函式介面

10void msort(elementtype a, elementtype tmpa, int l, int rightend);//

傳入左右邊界

11void merge(elementtype a, elementtype tmpa, int l, int r, int rightend);//

將有序的兩個部分進行歸併

1213

14int

main()

1526

27void mergesort(elementtype a, int

n) 33

else

34 printf("

error!\n

");//

記憶體申請失敗35}

3637

void msort(elementtype a, elementtype tmpa, int l, int

rightend) 44}

4546

void merge(elementtype a, elementtype tmpa, int l, int r, int

rightend)

56while (l <=leftend)

57 tmpa[tmpl++] = a[l++];

58while (r <=rightend)

59 tmpa[tmpl++] = a[r++];

60for (int i = 0; i < elementnum; i++, rightend--)

61 a[rightend] =tmpa[rightend];

62 }

c/c++的非遞迴寫法:

1

//mergesort_without_recursion.cpp : 此檔案包含 "main" 函式。程式執行將在此處開始並結束。2//

歸併排序的非遞迴寫法

34 #include 5

#define elementtype int

6using

namespace

std;78

void mergesort(elementtype a, int

n);9

void msort(elementtype a, elementtype tmpa, int length, int

n);10

void merge(elementtype a, elementtype tmpa, int l, int r, int

rightend);

1112

intmain()

1324

25void mergesort(elementtype a, int

n) 35

free

(tmpa);36}

37else

38 printf("

error!\n

");//

記憶體申請失敗39}

4041

void msort(elementtype a, elementtype tmpa, int length, int

n) 51

52void merge(elementtype a, elementtype tmpa, int l, int r, int

rightend)

61while (l <=leftend)

62 tmpa[tmpl++] = a[l++];

63while (r <=rightend)

64 tmpa[tmpl++] = a[r++];

65 }

歸併排序(遞迴與非遞迴)

1.遞迴 把序列分成元素個數盡量相等的兩部分,再將兩半分別排序,合併有序的兩個序列 遞迴 void merge sort int a,int low,int heigh,int t a為待排序陣列,low,high分別為a的上下限 0 n 1 t為輔助陣列 for i low,j 0 i heigh...

歸併排序 遞迴 非遞迴

首先簡單的介紹一下歸併演算法的核心思想 將我們將一組資料分成若干個組,即分到每組資料為1個元素的情況下就不用分了,然後在分別比較每兩組資料元素的大小,將其合併為一組資料再去和其他同等級別的組的資料元素取比較,然後合併到臨時的空間中然後在複製給原空間,依此類推,直到最後全部合併完畢,陣列就成為一組有序...

歸併排序(遞迴 非遞迴 自然歸併排序)

演算法思想 歸併排序是分治法的典型應用,其思想是不斷地將兩個有序的陣列合併為乙個有序陣列。遞迴實現 include void merge int a,int left,int m,int right void mergesortaux int a,int left,int right void me...