归并排序

/**
归并排序
**/
#include<stdio.h>
#include<stdlib.h>
//全局数组
int arrays[] = {1,4,2,5,2,87,3,4356,6,2,9,67,4,24,35,76,768,9,54,543,87,79,79,4,3534,54};
int b[100];


//合并
void MERGE(int low,int mid,int high)
{

int h = low;//左边部分数组第一个下标
int i=low; //辅助数组的第一个下标
int j = mid + 1;//右边数组第一个下标
//左右两个集合都没取尽
while( (h <= mid) && (j <= high))
{
if(arrays[h] <= arrays[j])
{
b[i] = arrays[h];
h++;
}
else
{
b[i] = arrays[j];
j++;
}
i++;
}
//处理剩下的一边的元素
//如果剩下左边的元素
while(h <= mid)
{
b[i] = arrays[h];
i++;
h++;

}

//处理剩下右边的元素

while(j <= high)
{
b[i] = arrays[j];
i++;
j++;
}




//把辅助数组中的值赋值到原数组的原位置
for(int q = low;q <=high;q++)
{
arrays[q]=b[q];
}

}
//拆分
void MERGESORT(int low,int high)
{
if(low < high)
{
int mid = (low+high)/2;
MERGESORT(low,mid);
MERGESORT(mid+1,high);
MERGE(low,mid,high);
}
}
void printAll()
{
int k = sizeof(arrays) /sizeof(arrays[0]);
for(int i = 0;i < k ; i++)
{
printf("%d  ",arrays[i]);
}
}
void main()
{
printf("before : \n");
printAll();
printf("\n");
int k = sizeof(arrays) /sizeof(arrays[0]);
MERGESORT(0,k);
printf("atfer : \n");
printAll();

}


总结:

归并排序是先拆分,再合并。这样的好处是可以利用一个辅助数组,将排好序的数组,依次放入辅助数组,而不用移动元素。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值