• 归并排序算法


    归并排序:  实际就是递归,  分治 的运用。

    思路:       假设一个数组    4  2  3  1    

             二分德到     4   2                             3   1  两个数组

             分到不能再分的时候再进行排序

    例如            {4,2}  数组  分为         {4}     {2}  两个数组        然后合并治理   得到   {2,4}

    这样说很抽象,那就直接来个例子   

               上面进行了一次操作之后得到        {2,4}  {1,3}  两个有序数组 

          我们声明一个temp[]数组         然后分别都 {2,,4}{1,3}     比较      2 与1比较     将小的放入temp中    ----->      temp[0]=1

                            继续       2与3比较,                   --------->temp[1] =2

                        然后  4 ,3比较             ---------->temp[2]=3                        注意   两个数组没有一个填充完的时候,那么分别取前数组的第一个进行比较,然后放入temp数组中

    代码:

    #include<iostream>
    #include<cstdlib>
    #include<cstdio>
    using namespace std;
    void merge(int arr[],int first,int mid,int last)
    {
    int *temp=new int[last-first+1];
    int i,j,cnt=0;
    for (i=first,j=mid+1;i<=mid&&j<=last;){
    if (arr[i]<arr[j]){
    temp[cnt++]=arr[i++];
    }
    else {
    temp[cnt++]=arr[j++];
    }
    }
    for (;i<=mid;) //第一个序列有剩余
    temp[cnt++]=arr[i++];
    for (;j<=last;) //第二个序列有剩余
    temp[cnt++]=arr[j++];
    for (j=0,i=first;i<=last;i++,j++)
    arr[i]=temp[j];
    delete[] temp;
    }
    void merge_sort(int arr[],int start,int end)
    {
    if (start<end){
    int mid=(start+end)/2;
    merge_sort(arr,start,mid);
    merge_sort(arr,mid+1,end);
    merge(arr,start,mid,end);
    }
    }
    int main()
    {
    int i,a[]={9,5,4,2,7,8,1,3,6,0};
    printf ("排序前 ");
    for(i=0;i<10;i++)
    printf("%d ",a[i]);
    cout<<endl;
    merge_sort(a,0,9);//分 // merge_sort(数组名,a,b) 只对 数组名[a] 到 数组名[b] 进行排序,小于a或大于b 则不进行处理
    for(i=0;i<10;i++)
    printf("%d ",a[i]); printf(" ");
    system("pause");
    return 0;
    }

  • 相关阅读:
    pom
    Java API操作Hadoop可能会遇到的问题以及解决办法
    hadoop在windows上的配置文件
    UNC路径
    spark在windows的配置
    Oracle系统表整理+常用SQL语句收集(转载)
    sbt配置文件
    (转)Flink简介
    spark osx:WARN NativeCodeLoader:62
    试图加载格式不正确的程序。 (异常来自HRESULT:0x8007000B)
  • 原文地址:https://www.cnblogs.com/q1204675546/p/9282865.html
Copyright © 2020-2023  润新知