#include<stdio.h>
/**在执行的过程中分为两段时有可能不均,使得时间复杂度为O(n^2),
可以采用随机化版本来解决这个问题*/
void QuickSort(int a[],int low,int high)
{
int i = low,j = high,tmp;
if (low<high)
{
tmp = a[i];
while(i!=j)
{
while(j>i &&a[j]>=tmp)j--; //从右往左查找第一个比tmp小的值,放到左边
a[i] = a[j];
while(i<j && a[i]<=tmp)i++; //从左往右查找第一个比tmp大的值,放到右边
a[j] = a[i];
}
a[i] = tmp;
QuickSort(a,low,i-1); //在上面完成后即a[i]已经放在正确位置上,分为[low,i-1]和[i+1,high]两个区间
QuickSort(a,i+1,high);
}
}
/*二分查找,a为递增序列*/
int BinSearch(int a[],int n,int x)
{
int low=0,high = n-1,mid;
while(low<=high)
{
mid = (low+high)/2;
if (a[mid]==x)return mid;
else if(a[mid]>x)high = mid-1; //即中间值大于x,在下半段
else low = mid+1; //中间值小于x,在上半段
}
return -1;
}
快速排序模板和二分查找
最新推荐文章于 2023-12-24 15:36:15 发布