zoukankan      html  css  js  c++  java
  • 归并排序/合并排序c++实现

    #include <iostream>
    #include<string.h>

    using namespace std;
    class merges{
    public:
    void merge(int *a,int low,int mid,int high)
    {
    int i,j,k;
    i=low;
    j=0;//**********
    k=mid+1;
    int *b=new int[high-low+1];
    while(i<=mid&&k<=high)
    {
    if(a[i]<=a[k])
    {
    b[j]=a[i];

    j++;
    i++;
    }
    else{
    b[j]=a[k];
    j++;
    k++;
    }
    }

    while(i<=mid)
    {
    b[j]=a[i];
    j++;
    i++;
    }

    while(k<=high)
    {
    b[j]=a[k];
    j++;
    k++;
    }
    for(int a1=low,a2=0;a1<=high;a1++,a2++)//######
    {
    a[a1]=b[a2];


    }

    }
    void mergesort(int *a,int low,int high)
    {

    if(low<high)
    {
    int mid=(high+low)/2;
    mergesort(a,low,mid);
    mergesort(a,mid+1,high);
    merge(a,low,mid,high);
    }


    }
    };

    int main()
    {
    int arr[]={2,3,5,1,9,98,76};
    merges m;
    int len=sizeof(arr)/sizeof(int);
    m.mergesort(arr,0,len-1);

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

    cout<<arr[i]<<endl;
    }
    return 0;
    }

    红色部分为易错部分:记住b是新开的,始终只能从一开始,而a的low则不然,随分割次数,low的值也是会变化的。。注意哦!!!!!!!

    重要的事情说三遍(我也是错了。一直找不到错的地方。后来改了很久/(ㄒoㄒ)/~~)

  • 相关阅读:
    P1019 单词接龙
    P1219 八皇后
    Find a way
    P1056 排座椅
    P1067 多项式输出
    关于前缀和,A
    洛谷P1223
    洛谷P1803
    洛谷P1208
    常用方法 Excel转换为DataSet
  • 原文地址:https://www.cnblogs.com/8335IT/p/4886058.html
Copyright © 2011-2022 走看看