二分排序

#include<iostream>
#include<malloc.h>
using namespace std;
void Merge(int a[], int low , int mid, int high){
    int i = low;
    int j = mid+1;
    int k = 0;
    int *temp = (int *)malloc((high -low +3) *sizeof(int));
    while(i<=mid && j<=high){
        if(a[i] < a[j]){
            temp[k++]= a[i];
        }
        if(a[j] < a[i]){
            temp[k++] = a[j++];
        }
    }

    while(i<=mid){
        temp[k++]= a[i++];
    }
    while(j<=high){
        temp[k++]= a[j++];
    }
    for(int i=low, k = 0; i<=high; i++, k++){
        a[i]=temp[k];
    }
        
    free(temp);
}

void MergeSort(int a[], int low, int high){
    if(low < high){
        int mid = (low + high)/2;
        MergeSort(a, low, mid);
        MergeSort(a, mid+1, high);
        Merge(a,low, mid, high);
    }
}    
    
void show(int a[], int n) {
    cout<<a[0];
    for(int i=1; i<n; i++) {
        cout<<" ,"<<a[i];
    }
}
int main() {
    int a[10]= {9,8,7,6,5,4,3,2,1};
    cout<<"排序前:";
    show(a, 9);
    cout<<endl;
    MergeSort(a,0,8);
    cout<<"排序后:";
    show(a, 9);
}

猜你喜欢

转载自www.cnblogs.com/zhishoumuguinian/p/9140736.html