归并排序

2018-01-19  本文已影响8人  Luxin23

对一个数组排序,可以将数组(递归)的分成两半进行排序,然后将结果合并起来。

#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;
}

上一篇 下一篇

猜你喜欢

热点阅读