分治法的步骤:1. divide2. conquer3. combine#include<stdio.h> #include<iostream> using namespace std; //Below algorithm is according MIT's charles. void merge(int a[], int first, int mid, int last) { int* res = new int[last - first + 1]; int i, j, k; i = first; j = mid + 1; k = 0; while (i <= mid && j <= last) { if (a[i] <= a[j]) res[k++] = a[i++]; else res[k++] = a[j++]; } while (i <= mid) res[k++] = a[i++]; while (j <= last) res[k++] = a[j++]; for (i = 0; i < k; i++) a[first++] = res[i]; delete []res; } void mergeSort(int a[], int first, int last) { if (first < last) { int mid = (first + last)/2; mergeSort(a, first, mid); mergeSort(a, mid + 1, last); merge(a, first, mid, last); } } void outputArray(int a[], int n) { for (int i = 0; i < n; i++) cout<<a[i]<<" "; cout<<endl; } int main(int argc, char * argv[]) { int a[] = {-4, 3, 56, -15, 34, 0, -14, 4}; int n = sizeof(a)/sizeof(int); mergeSort(a, 0, n-1); outputArray(a, n); }
分治法---归并排序
最新推荐文章于 2023-09-20 00:11:59 发布