对一个数组排序,可以将数组(递归)的分成两半进行排序,然后将结果合并起来。
#include <iostream>
using namespace std;
int aux[10];
void merge(int a[], int l, int mid, int r){
int i = l, j = mid + 1;
for(int k = l; k <= r; k++){
aux[k] = a[k];
}
for(int k = l; k <= r; k++){
if(i > mid){
a[k] = aux[j++];
}else if(j > r){
a[k] = aux[i++];
}else if(aux[i] > aux[j]){
a[k] = aux[j++];
}else{
a[k] = aux[i++];
}
}
}
void mergeSort(int a[], int l, int r){
if (l >= r) return;
int mid = l + (r - l) / 2;
mergeSort(a, l, mid);
mergeSort(a, mid + 1, r);
merge(a, l, mid, r);
}
int main(){
int a[10] = {10, 9, 8, 7, 6, 5, 4, 3, 2, 1};
mergeSort(a, 0, 9);
return 0;
}