归并排序

实战 Java 并发编程
实战为导向,从Java 并发原理出发,并集合开发实践,全面剖析 Java 并发编程。
wangxiaoming

                                                                                                 归并排序

                               排序思想:

                                               主要进行的操作就是归并操作,先通过递归进行分组,然后进行归并操作完成归并排序

                               实现步骤:

                                               第一步:将数组分成两组,low  ~  mid 和 mid +1  ~ high 然后比较两数组的大小,小的放入新的数组里面,然后继续往下找

                                               第二步:     循环完成后可能会有一组没有排完,于是依次将剩余数插入数组即可

                                               第三步: 将新数组赋值给原来的数组完成操作,即可实现排序

                                最主要的是用递归的办法进行分治,然后即可排序

                                “ 注意”:这里要注意的是 i < = mid 的这个等号能不能要的问题, = 这里取了才能正常运行,而不取程序是会错错的,具体原因,有待分析!!!

                              源代码:

                                       

#include<iostream>

using namespace std;

void merge(int arr[],int low,int mid, int high)
{
    int j, k;
    int i = low ;
    int bar[1000];
    for(k = low, j = mid+1; i <= mid && j <= high;k++)
    {//主要先将数组分成两半,然后比较大小付给第三个数组
         if(arr[j] < arr[i])
         {
             bar[k] = arr[j++];
         }
         else
         {
             bar[k] = arr[i++];
         }
    }//数组完成比较后肯定会有一组多,一组少的情况,因此要进行下面的比较
    while(i <= mid)
    {
        bar[k++] = arr[i++];    //这里必须要有一个循环,而不单单是判断哪个数组已经排完了

    }

    while(j <= high)
    {
       bar[k++] = arr[j++];
    }
    for(k = low; k  <= high; k++)
    {
       arr[low++] = bar[k];
    }
}

void mergesort(int arr[] ,int l, int h)
{
    int mid ;
    if(h > l)
    {
        mid = (h+l)/2;
        mergesort(arr, l, mid);
        mergesort(arr, mid+1, h);
        merge(arr, l, mid ,h);
    }
}

int main()
{
    int i;
    int a[1000];
    cout<<"Please enter some numbers"<<endl;
    for(i = 0; i < 9; i++)
    {
        cin>>a[i];
    }
    mergesort(a,0,9);
    for(i = 0;i < 9; i++)
    {
        cout<<a[i]<<" ";
    }

     return 0;
}



 

wangxiaoming CSDN认证博客专家 架构 Spring Boot Redis
博客是很好的总结和记录工具,如果有问题,来不及回复,关注微信公众号:程序员开发者社区,获取我的联系方式,向我提问,也可以给我发送邮件,联系 1275801617@qq.com
©️2020 CSDN 皮肤主题: Age of Ai 设计师: meimeiellie 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值