zoukankan      html  css  js  c++  java
  • 归并排序,还有非递归方式没写

    #include <iostream>
    using namespace std;
    void Merge(int SR[],int i,int m,int n)//n表示数组中最后一个元素的下标,i表示第一个元素的下标,m表示前一个数组最后一个元素的下标
    {
        int *TR=new int[n-i+1];
        int ptr1=i;
        int ptr2=m+1;
        int j=0;
        while(ptr1<=m&&ptr2<=n)//可能有一个没有完
        {
            if(SR[ptr1]<=SR[ptr2])
            {
                TR[j++]=SR[ptr1++];    
            }
            else{    
                TR[j++]=SR[ptr2++];
            }
        }
        while(ptr1<=m)//此处为m!!!
        {
            TR[j++]=SR[ptr1++];
        }
        while(ptr2<=n)//此处为n!!!
        {
            TR[j++]=SR[ptr2++];
        }
        //for(int j=0;j<n-i+1;j++)
        //{
        //    cout<<TR[j];//j写成i了!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
        //}
        int ptr=i;
        for(int j=0;j<n-i+1;j++)//此处j<n-i+1而不是n
        {
            SR[ptr++]=TR[j];
        }
    
    
    }
    void MSort(int SR[],int s,int t)
    {
        if(s!=t)
        {
            int m=(s+t)/2;
            MSort(SR,s,m);
            MSort(SR,m+1,t);//加一
            Merge(SR,s,m,t);
        }
    }
    
    int main()
    {
        int arr[]={4,2,1,9,2,5,7,8,10,34,5436,54,3235,435,435,4,3};
        //Merge(arr,3,3,4);
        //cout<<sizeof(arr)/sizeof(arr[0]);
        
        MSort(arr,0,16);
        for(int i=0;i<17;i++)
        {
            cout<<" "<<arr[i];
        }
      
        getchar();
        return 0;
    }
  • 相关阅读:
    MFC单文档中进行plc点云显示
    modbus发送和接收
    测试左移和测试右移
    2021软件测试笔试题
    202106月份总结测试开发面试题
    KuaiShou面试题
    阿拉伯数学手写体。
    GeminiScrollbar
    vue-core-video-player
    webpack
  • 原文地址:https://www.cnblogs.com/GW17195/p/5719868.html
Copyright © 2011-2022 走看看