分治思维的几个算法:二分检索、快排、归并排序
分治思想的几个算法:二分检索、快排、归并排序
/*分治思想的各种算法*/ #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; }