经常作为复杂算法中的某一步骤,非常重要的两个算法,虽然简单,但并不一定能在很短的时间内完整正确的写出来,自己专门写在博客上,以备经常复习。
快排
//快速排序法
void quick_sort(int arr[],int L ,int R)
{
if(L>=R)return ; //数量小于等于一个直接返回;
int i=L,j=R;
pivot=arr[i]; //基准值的取法,取固定定值最左边
while(i<j)
{
while(i<j&&arr[j]>=pivot)
--j;
if(i<j){
arr[i]=arr[j];
i++;
}
while(i<j&&arr[i]<pivot)
++i;
if(i<j){
arr[j]=arr[i];
--j;
}
}
arr[i]=pivot;
quick_sort(arr,L,i-1);
quick_sort(arr,i+1,R);
}
二分查找
int find_key(int arr[],int L,int R,int key)
{
//从 L下标到 R下标去查找关键值 key
int mid;
while(L<=R)
{
mid=L+(R-L)>>1;
if(arr[mid]>key)
R=mid-1;
else if(arr[mid]<key)
L=mid+1;
else
return mid;
}
return -1; //没找到返回-1;
}