歸並排序--二路歸並


歸並排序時的時間復雜度為O(nlgn)其主要思想是分治法(divide and conquer),分就是要將n個元素的序列划分為兩個序列,再將兩個序列划分為4個序列,

直到每個序列只有一個元素,最后,再將兩個有序序列歸並成一個有序的序列再得到兩個有序序列,再合成一個有序序列。。


#include <iostream>
#include <cstdio>
using namespace std;
void mergeSort(int jk[], int bo[], int left, int mid, int right){
int i = left, j = mid+1, k = left, l;
while(i <= mid && j <= right){
if(jk[i] > jk[j]) bo[k++] = jk[j++];
else bo[k++] = jk[i++];
}
while(i <= mid) bo[k++] = jk[i++];
while(j <= right) bo[k++] = jk[j++];
for(l = left; l < k; ++l)
jk[l] = bo[l];
}
void merge(int jk[], int bo[], int left, int right){
int mid;
if(left < right){
mid = (left+right)/2;
merge(jk, bo, left, mid);
merge(jk, bo, mid+1, right);
mergeSort(jk, bo, left, mid, right);
}
}
int main(){
int bo[15], jk[15] = {0, 5, 8, 1, 7, 9, 6, 0, 3, 4, 2};
merge(jk, bo, 1, 10);
for(int i = 1; i <= 10; ++i)
printf("%d ", jk[i]);
return 0;
}



注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



歸並排序:二路歸並 二路歸並排序問題 二路歸並排序 二路歸並排序 二路歸並排序 二路歸並排序 二路歸並排序算法 二路歸並排序 二路歸並排序 二路歸並排序
 
粤ICP备14056181号  © 2014-2020 ITdaan.com