C++归并排序

使用递归方法实现C++的归并排序

#include<iostream>
using namespace std;
void MergeSort(int *array,int start,int end){
    //递归的中止条件:当数组里只有一个元素的时候
        //c++中数组习惯左闭右开,所以end指的是最后一个元素的下一个位置的下标
    if(start==end-1)
        return ;
    //通过递归的调用,对两个子数组分开排序
        //找到一个中分点,一直进行下去直到满足终止条件
    int mid=(end+start)/2;
    MergeSort(array,start,mid);//左开右闭的区间防止重复排序
    MergeSort(array,mid,end);
    //合并两个排序好的子数组
        //分配临时空间
    int *tmp=new int[end-start];//创建动态数组,new可以理解为分配
        //依次取出子数组的元素合并
    int left_idx=start,right_idx=mid,i=0;
    while(left_idx<mid && right_idx<end){//当其中一个数组没有元素时,跳出循环
        if(array[left_idx] < array[right_idx])
            tmp[i++]=array[left_idx++];//i先不自己加,完成运算后加1
        else
            tmp[i++]=array[right_idx++];
    }
        //若某一个子数组的元素没有取完,则全部并于临时空间
    while(left_idx<mid){
        tmp[i++]=array[left_idx++];
    }
    while(right_idx<end){
        tmp[i++]=array[right_idx++];
    }
    //从临时空间取回元素放置原数组
    int idx=start;
    for(i=0;i<end-start;i++,idx++){
        array[idx]=tmp[i];
    }
    //释放临时空间防止造成程序内存泄露
    delete[] tmp;
}
int main(){
    int test[10]={3,5,7,4,2,3,8,6,4,2};
    MergeSort(test,0,10);
    int i;
    for(i=0;i<10;i++){
        cout<<test[i]<<' ';
    }
return 0;}

我的微信公众号

猜你喜欢

转载自blog.csdn.net/sd4567855/article/details/79165358