排序算法詳解
阿新 • • 發佈:2017-09-03
分治思想 分享 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); }
排序算法詳解