归并排序

来源:互联网 发布:校园网络规划毕业设计 编辑:程序博客网 时间:2024/06/17 06:12

归并排序是利用递归和分治技术将数据划分成越来越小的半子表,再对半子表排序,最后再利用递归方法将排序的半子表合并成越来越大的有序序列。


#include<iostream>using namespace std;void merge(int a[], int p, int q, int r) {int n1 = q - p+1;int n2 = r - q;int* left = new int[n1];int* right = new int[n2];size_t i = 0, j = 0, k = 0;for ( i = 0,k=p; i < n1; i++,k++){left[i] = a[k];}for ( i = 0,k=q+1; i < n2; i++,k++){right[i] = a[k];}for (i = 0,j=0,k=p; i < n1 && j<n2; k++){if (left[i]<right[j]){a[k] = left[i];i++;}else{a[k] = right[j];j++;}}  if (i<n1){while (i < n1) {a[k] = left[i];i++;k++;}}if (j<n2){while (j < n2) {a[k] = right[j];j++;k++;}}}void mergeSort(int a[],int p,int r) {if (p<r){int m = (p + r) / 2;mergeSort(a, p, m);mergeSort(a, m + 1, r);merge(a, p, m, r);}}int main(){int a[] = { 5,4,9,8,7,6,0,1,3,2 };int len = sizeof(a)/sizeof(int);//cout << len << endl;mergeSort(a, 0, len - 1);for (size_t i = 0; i < len; i++){cout << a[i] <<endl;}system("pause");    return 0;}

0 0
原创粉丝点击