归并排序--二路归并

来源:互联网 发布:ubuntu解压缩命令 .gz 编辑:程序博客网 时间:2024/05/22 03:50
归并排序时的时间复杂度为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;}


1 0
原创粉丝点击