【資料結構】歸併排序
歸併排序(Merge sort,臺灣譯作:合併排序)是建立在歸併操作上的一種有效的排序演算法。該演算法是採用分治法(Divide and Conquer)的一個非常典型的應用。(維基百科)
參考文章:
http://blog.csdn.net/morewindows/article/details/6678165
下面是具體程式碼:
#include <stdio.h>
#define true 1
#define false 0
//將有二個有序數列a[first...mid]和a[mid...last]合併。
void mergearray(int a[], int first, int mid, int last, int temp[])//first,mid,last均為下標
{
int i = first, j = mid + 1;
int m = mid, n = last;
int k = 0;
while (i <= m && j <= n)
{
if (a[i] < a[j])
temp[k++] = a[i++];
else
temp[k++] = a[j++];
}
while (i <= m)
temp[k++] = a[i++];
while (j <= n)
temp[k++] = a[j++];
for (i = 0; i < k; i++)
a[first + i] = temp[i];
}
void mergesort(int a[], int first, int last, int temp[])
{
if (first < last)
{
int mid = (first + last) / 2;
mergesort(a, first, mid, temp); //遞迴使得左邊有序
mergesort(a, mid + 1, last, temp); //遞迴使得右邊有序
mergearray(a, first, mid, last, temp); //再將二個有序數列合併
}
}
int MergeSort(int a[], int n)
{
//int *p = new int[n];
int * p = (int *)malloc( n*sizeof(int) );
if (p == NULL)
return false;
mergesort(a, 0, n - 1, p);
//delete[] p;
free(p);
return true;
}
int main()
{
int i;
int a[]={23,4,9,34,12,3,89,7,80};
MergeSort(a,9);
for(i=0; i<9; i++)
printf("%d ",a[i]);
printf("\n");
return 0;
}
相關文章
- 【資料結構】歸併排序!!!資料結構排序
- 資料結構 歸併排序 C++資料結構排序C++
- 資料結構:歸併排序(非遞迴)資料結構排序遞迴
- 【資料結構與演算法】歸併排序資料結構演算法排序
- 資料結構與演算法——歸併排序資料結構演算法排序
- 複習資料結構:排序演算法(四)——歸併排序資料結構排序演算法
- 資料結構與演算法——排序演算法-歸併排序資料結構演算法排序
- (戀上資料結構筆記):歸併排序(Merge Sort)資料結構筆記排序
- 演算法與資料結構高階排序演算法之歸併排序演算法資料結構排序
- 演算法與資料結構系列 ( 七 ) - 歸併排序- Merge Sort演算法資料結構排序
- 單連結串列的歸併(資料結構)資料結構
- 連結串列歸併排序排序
- 【Java資料結構與演算法】第八章 快速排序、歸併排序和基數排序Java資料結構演算法排序
- [排序] 歸併排序排序
- 演算法:排序連結串列:歸併排序演算法排序
- 排序演算法總結之歸併排序排序演算法
- 歸併排序排序
- 【資料結構與演算法】高階排序(希爾排序、歸併排序、快速排序)完整思路,並用程式碼封裝排序函式資料結構演算法排序封裝函式
- 快速排序&&歸併排序排序
- 淺談歸併排序:合併 K 個升序連結串列的歸併解法排序
- 四、歸併排序 && 快速排序排序
- java歸併排序Java排序
- [java]歸併排序Java排序
- 歸併排序模板排序
- [C++]歸併排序(連結串列描述)C++排序
- 資料結構與演算法——歸併排序: 陣列&連結串列&遞迴&非遞迴解法全家桶資料結構演算法排序陣列遞迴
- 資料結構與排序資料結構排序
- 【資料結構】希爾排序!!!資料結構排序
- 【資料結構】希爾排序資料結構排序
- 【資料結構】堆排序資料結構排序
- 【資料結構】快速排序資料結構排序
- 從零開始學資料結構和演算法 (五) 分治法 (二分查詢、快速排序、歸併排序)資料結構演算法排序
- 淺談演算法和資料結構(3):合併排序演算法資料結構排序
- 歸併排序--二路排序排序
- 排序演算法__歸併排序排序演算法
- 排序演算法:歸併排序排序演算法
- 歸併排序和基數排序排序
- 歸併排序--排序演算法排序演算法