您的位置:首页 > 其它

归并排序--二路归并

2017-03-06 18:01 288 查看
归并排序时的时间复杂度为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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: