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

2021-08-21 07:21:11 字數 1478 閱讀 1173

歸併排序:採用的是一種分而治之的思想.

過程:將乙個陣列進行二分,直到有每組有乙個元素為止.然後進行合併元素,按照一定的順序進行排序.

**實現:

①:遞迴實現

void merge(int arr,int left,int mid,int right,int tmp)

int start = left;

int end = mid;

intindex = 0;

while(start < mid && end < right)

else

}while(start < mid)

while(end < right)

memcpy(arr + left,tmp,sizeof(int)*(right - left));

}void _mergesort(int arr,int left,int right,int tmp)

int mid = left + (right - left)/2;

_mergesort(arr,left,mid,tmp);

_mergesort(arr,mid,right,tmp);

merge(arr,left,mid,right,tmp);

}//歸併排序(遞迴)

void mergesort(int arr,int size)

int* tmp = (int*)malloc(sizeof(arr[0])*size);

_mergesort(arr,0,size,tmp);

free(tmp);

}

②:非遞迴實現

void merge(int arr,int left,int mid,int right,int tmp)

int start = left;

int end = mid;

int index = 0;

while(start < mid && end < right)

else

}while(start < mid)

while(end < right)

memcpy(arr + left,tmp,sizeof(int)*(right - left));

}//非遞迴

void mergesortbyloop(int arr,int

size)

int gap = 1;

int* tmp = (int

*)malloc(sizeof(arr[0])*size);

for(;gap < size;gap *=

2)

if(end > size)

merge(arr,start,mid,end,tmp);}}

}

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

基本思路 歸併排序 merge sort 是建立在歸併操作上的一種有效的排序演算法,該演算法是採用分治法 divide and conquer 的乙個非常典型的應用。將已有序的子串行合併,得到完全有序的序列 即先使每個子串行有序,再使子串行段間有序。歸併排序遞迴體,把整個序列遞迴分為兩個長度為1的子...

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

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 歸併排序幾乎以o nlogn 的時間界實現,是典型的分治演算法 2 歸併排序的基本思路很簡單 就是將目標序列分為兩個部分,將兩個子串行排序好之後,再將它們合併。注意到合併兩個已排序的序列只需要o n 的時間界。3 對兩個子串行的排序顯然也是通過遞迴的歸併排序實現的。4 需要注意的乙個小細節...