#include<stdlib.h>
#include<stdio.h>
using namespace std;
void Merge(int* src,int * des,int low,int mid,int hight)
{
int i = low;
int j = mid + 1;
int k = low;
while (i<=mid&&j<=hight)//將小的梵高目的地中
{
if (src[i]<src[j])
{
des[k++] = src[i++];
}
else
{
des[k++] = src[j++];
}
}
while (i<=mid)//若還剩幾個尾部元素,加到後面
{
des[k++] = src[i++];
}
while (j <= hight)
{
des[k++] = src[j++];
}
}
//每次分爲兩路。當只剩下一個元素時,就不需要再劃分
void MSort(int* src, int* des, int low, int high,int max)
{
if (low==high)
{
des[low] = src[low];
}
else//如果多個元素,進行兩路劃分
{
int mid = (low + high) / 2;
int* space = (int*)malloc(sizeof(int)*max);
//遞歸進行兩路的劃分,當剩下一個元素的時候,遞歸劃分結束,然後開始merge歸併操作
if (space!=NULL)
{
MSort(src,space,low,mid,max);
MSort(src, space, mid+1, high, max);
Merge(space, des, low, mid, high);
}
free(space);
}
}
void MergeSort(int * arry,int count)
{
MSort(arry,arry,0,count-1,count);
}
void main()
{
int arry[] = { 12,20,45,25,35,1,2,54,52 };
int count = sizeof(arry) / sizeof(*arry);
printf("arry數組個數:%d\n", count);
for (int i = 0; i < count; i++)
{
printf("%d ", arry[i]);
}
printf("\n排序之前");
MergeSort(arry, count);
for (int i = 0; i < count; i++)
{
printf("%d ", arry[i]);
}
printf("\n排序之後");
system("pause");
}
排序算法—歸併排序
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.