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

排序算法详解

时间:2017-09-03 16:39:50      阅读:284      评论:0      收藏:0      [点我收藏+]

标签:jpg   sort   es2017   排序算法   过程   实现   分治   区间合并   nlog   

1.归并算法步骤:

  1>分解:将无序序列不断分裂,直到每个区间都只有一个数据为止(递归实现)

  2>合并:将两个区间合并为有序区间,一直合并到只有一个区间为止(分治思想)

技术分享

下面代码为归并过程:

//归并过程--将两个有序的数组合并成一个有序数组
void merge(int array[],int left,int middle,int right)
{
    int *tempArray = new int[right-left+1]; 
    int index1=left;
    int index2=middle+1;
    int i=0;
    while(index1<=middle&&index2<=right)
    {
        if (array[index1]<=array[index2])
            tempArray[i++]=array[index1++];
        else
            tempArray[i++]=array[index2++];
    }
    while (index1<=middle)
        tempArray[i++]=array[index1++];
    while (index2<=right)
        tempArray[i++]=array[index2++];
    for(int j=0;j<i;++j)
        array[left+j]=tempArray[j];
    delete[] tempArray;
}

下图为递归和合并有序的过程(时间复杂度为NlogN)

//递归大法好
void MergeSort(int* array,int left,int right)
{
    if(left>=right||array==NULL) return;
    //if(right-left<2) return ;
    int middle=(left+right)/2;
    MergeSort(array,left,middle);
    MergeSort(array,middle+1,right);
    merge(array,left,middle,right);
}

 

排序算法详解

标签:jpg   sort   es2017   排序算法   过程   实现   分治   区间合并   nlog   

原文地址:http://www.cnblogs.com/zhaodun/p/7469777.html

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