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

2021-07-10 12:00:52 字數 693 閱讀 2020

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; i++, j++)

}}

2.非遞迴:

首先查詢陣列中自然排序好的序列,兩兩合併,迴圈下去,直到不再合併即為有序

void merge(int *a, int l, int m, int r) //合併函式

if(i>m) //左空右非空 }

else //左非空右空 }

for(p=l, q=0; p<=r; p++, q++) //將t中排好序的複製回a中 }

void fun(int *a, int n) //排序,a為待排序陣列,n為陣列中元素個數

{ int i;

int low, mid, heigh; //low,mid,heigh記錄兩個合併的序列指標

int flag; //判斷是否有序

while(1)

{ flag=1;i=0;

while(i

歸併排序 遞迴 非遞迴

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

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

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

歸併排序 遞迴與非遞迴實現

歸併排序 採用的是一種分而治之的思想.過程 將乙個陣列進行二分,直到有每組有乙個元素為止.然後進行合併元素,按照一定的順序進行排序.實現 遞迴實現 void merge int arr,int left,int mid,int right,int tmp int start left int end...