归并排序

来源:互联网 发布:pixlr软件 编辑:程序博客网 时间:2024/06/06 18:33


未测试边界条件

#include <iostream>using namespace std;void merge(int a[], int left, int mid, int right){  int *tmp = new int[right - left + 1];  int i = left, j = mid + 1, k = 0;  while(i <= mid && j <= right){    if (a[i] < a[j]){      tmp[k] = a[i];      ++i;    }    else{      tmp[k] = a[j];      ++j;    }    ++k;  }  while(i <= mid){    tmp[k] = a[i];    ++k; ++i;  }  while(j <= right){    tmp[k] = a[j];    ++k; ++j;  }  for (k = 0, i = left; i <= right; ++k, ++i){    a[i] = tmp[k];  }  delete [] tmp;}void msort(int a[], int left, int right){  if (left >= right)    return;  int mid = (left + right) / 2;  msort(a, left, mid);  msort(a, mid + 1, right);  merge(a, left, mid, right);}int main(){  int a[10] = {5, 9, 3, 4, 6, 1, 2, 0, 7, 8};  msort(a, 0, 9);  for (int i = 0; i < 10; ++i)    cout << a[i] << endl;  int ttt = 0;  return 0;}


0 0
原创粉丝点击