排序算法详解

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了排序算法详解相关的知识,希望对你有一定的参考价值。

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

 

以上是关于排序算法详解的主要内容,如果未能解决你的问题,请参考以下文章

快速排序算法详解及代码实现

七大排序算法(插排,希尔,选择排序,堆排,冒泡,快排,归并)--图文详解

PHP希尔(Shell)排序算法的实现(代码详解)

❤️十大排序算法详解❤️——可能是你看过最全的,完整版代码

Java排序算法 - 堆排序的代码

[数据结构]选择排序算法和希尔排序算法详解