归并排序

本文介绍了一种使用C++实现的归并排序算法。通过递归地将数组分为更小的部分并逐一排序,最终将有序子数组合并为完整的有序数组。文章提供了完整的代码示例,并演示了如何对一组整数进行排序。

#include"iostream"

using namespace std;

//让两个数组融合

int Merge(int a[], int low,int mid,int high){

//space暂时的数组去存储融合好的两个数组!

int *space = (int *)malloc(sizeof(int)*(high - low + 1));

if (space == NULL){

return -1;

}

int l = low;

int m = mid+1;

int h = high; 

int i = 0;

//红色部分是将两个数组融合的关键

while ((l<= mid)&&(m <= high)){

space[i++] = (a[l]>a[m]) ? a[m++] : a[l++];

//注意这里你取走谁的值就实行自加;

}

while (l <=mid){//第一个数组有剩余!

space[i++] = a[l++];

}

while (m <= high){//第二个数组有剩余!

space[i++] = a[m++];

}

for (int i = low,k=0; i <=high; i++,k++){

a[i] = space[k];//让临时数组的值全都赋值过去

}

return 0;

}


void MergeSort(int a[], int low, int high){

if (low < high){

int mid=(low+high)/2;

//采用分冶法进行排序。让数组中一部分一部分的排好。最后慢慢融合

MergeSort(a, low, mid);//让a[low]到a[mid]排好序!

MergeSort(a, mid + 1, high);//让a[mid+1]到a[high]排好序!

Merge(a, low, mid, high);//最后融合

}

return;

}

int main()

{


//int array[] = {21, 25, 49, 25, 16, 8};

int array[] = { 21, 25,56,32,14,5,7,8,64 };

int len = sizeof(array) / sizeof(*array);

MergeSort(array, 0,len-1);

for (int i = 0; i < len; i++){

cout << array[i] << " ";

}

cout << endl;

system("pause");

return 0;

}



本文转自 神迹难觅 51CTO博客,原文链接:http://blog.51cto.com/ji123/1926062,如需转载请自行联系原作者
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值