归并排序(merge sort)

#include<iostream>
using namespace std;


void mergeSort(int *, int, int);
void merge(int*, int, int, int);
void display_arr(int * A, int length);


int main()
{
int oriArr[12] = { 2, 1, 4, 3, 5, 8, 6, 5, 7, 0, 10, 12 };
cout << "**************the ori array is **************" << endl;
display_arr(oriArr, 12);
mergeSort(oriArr, 0, 12);
cout << "**************the aorted array is **************" << endl;
display_arr(oriArr, 12);
}


void display_arr(int * A, int length)
{
for (int i = 0; i < length; i++)
cout << A[i] << " ";
cout << endl << endl;
}


void mergeSort(int * A, int begin, int end)
{
if (end > begin)
{
int middle = (begin + end) / 2;
if (middle > begin)
{
mergeSort(A, begin, middle);
mergeSort(A, middle, end);
merge(A, begin, middle, end);
}
}
}


void merge(int *A, int begin, int middle, int end)
{
int * arr1 = new int[middle - begin + 1];
int * arr2 = new int[end - middle + 1];
for (int i = 0; i < middle-begin; i++)
arr1[i] = A[begin + i];
arr1[middle - begin] = 100000;


for (int i = 0; i < end - middle; i++)
arr2[i] = A[middle + i];
arr2[end - middle] = 100000;


int index = begin;
int i = 0;
int j = 0;
while (index != end)
{
if (arr1[i] < arr2[j])
{
A[index++] = arr1[i++];
}
else
A[index++] = arr2[j++];
}
delete[] arr1;
delete[] arr2;




}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值