分治思维的几个算法:二分检索、快排、归并排序

分治思想的几个算法:二分检索、快排、归并排序
/*分治思想的各种算法*/
#include <stdlib.h>
#include <stdio.h>

/*二分检索算法*/
int BinarySearch(int a[],int n,int e)
{
    int index;
    int low=0,high=n-1, mid;

    while(low <= high)
    {
        mid = (low + high) / 2;
        if(e == a[mid])return mid;
        else if(e > a[mid])low = mid + 1;
        else high = mid - 1;
    }

    if(low >= high)return -1;
}

/*归并排序算法*/
void MergeSort(int a[],int low,int high)
{
    int mid;
    int temp[100],i,j,k;

    if(high == low)return;

    /*先细分排序*/
    mid = (low + high)/2;
    MergeSort(a,low,mid);
    MergeSort(a,mid+1,high);

    /*再归并*/
    i=low,j=mid+1,k=0;
    while(i<=mid && j<=high)
    {
        if(a[i] < a[j])temp[k++] = a[i++];
        else temp[k++] = a[j++];
    }
    for(;i<=mid;)temp[k++] = a[i++];
    for(;j<=high;)temp[k++] = a[j++];

    for(i=low,j=0;i<=high;)a[i++] = temp[j++];
}
/*快排,快速划分*/
int Partion(int a[],int low,int high)
{
    int v = a[low];

    if(low >= high)return;

    while(low < high)
    {
        while(a[high] >= v && high > low)high--;
        a[low] = a[high];

        while(a[low] <= v && high > low)low++;
        a[high] = a[low];
    }
    a[low] = v;

    return low;
}
void QuickSort(int a[],int low,int high)
{
    int index;
    if(low >= high)return;
    index = Partion(a,low,high);
    QuickSort(a,low,index-1);
    QuickSort(a,index+1,high);
}
/*打印出来*/
void print(int a[],int n)
{
    int i = 0;
    while(i < n)printf("%d\t",a[i++]);
    printf("\n");
}
int main(int argc, char *argv[])
{
    //int a[] = {0,1,2,3,4,5,6,7,8,9};
    int a[] = {2,4,6,8,9,7,5,3,1,0};
    int n = 10;

    QuickSort(a,0,9);
    print(a,10);
    printf("Position : %d\n",BinarySearch(a,n,4));

    return 0;
}