1. 程式人生 > >排序算法詳解

排序算法詳解

分治思想 分享 ray span 排序 排序算法 序列 jpg 兩個

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

排序算法詳解