分治思想的几个算法:二分检索、快排、归并排序
2012-09-12 18:54
651 查看
/*分治思想的各种算法*/ #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; }
相关文章推荐
- 【算法学习】归并排序——基于分治思想
- <菜鸟学算法-A排序(分治的思想:归并排序)>
- 归并排序模版(分治思想)
- 本文专注于<递归算法和分治思想>[胖虎学习算法系列]
- 算法基础:分治模式,归并排序ΘΘΘΘΘΘ知识小结
- 求二维平面最近点对算法; 分治思想; 递归写的好精准,模仿ACM模板写的.;很多细节处理的很漂亮;
- 利用分治思想,写一个求解从n个元素里选取m个有多少种组合方案的(非递归)高性能算法
- 算法思想之分治递归策略
- 递归和分治思想2 - 数据结构和算法32
- 【算法】快速排序——基于分治思想的实现
- 【算法和数据结构】分治思想之二分查找(C++实现)
- 分治思想应用:归并排序
- [珠玑之椟]二分思想与分治法、排序思想
- 关于JVM的几个垃圾收集算法思想
- 递归和分治思想1 - 数据结构和算法31
- 递归和分治思想2 - 数据结构和算法32
- 归并排序——分治思想
- 分治算法基本思想和典型例题
- 与二分分治有关的几个函数
- 常用算法思想一(分治思想)