码迷,mamicode.com
首页 > 编程语言 > 详细

归并排序,还有非递归方式没写

时间:2016-07-30 00:17:06      阅读:239      评论:0      收藏:0      [点我收藏+]

标签:

#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;
}

 

归并排序,还有非递归方式没写

标签:

原文地址:http://www.cnblogs.com/GW17195/p/5719868.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!