读书人

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

发布时间: 2012-09-18 16:21:42 作者: rapoo

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

/*分治思想的各种算法*/#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;}

读书人网 >编程

热点推荐