#include <stdio.h>
#include <stdlib.h>
int n;
int search(int *a,int n,int key){//n为数组个数元素
int low=0, high=6, mid;
while(low<=high){
mid = (low + high)/2;
if(a[mid]<key){
low = mid+1;
}else if (a[mid]>key){
high = mid-1;
}else{
return mid;
}
}
return -1;//代表未找到关键字
}
int split(int *a, int low, int high){
int part_elem;
part_elem = a[low];
for(;;){
while(low<high&&a[high]>=part_elem){
high--;
}
if(low>=high)break;
a[low++] = a[high];
while(low<high&&a[low]<=part_elem){
low++;
}
if(low>=high)break;
a[high--] = a[low];
}
a[high] = part_elem;
return high;
}
void quicksort(int *a, int low, int high){
int mid;
if(low>=high) return;//这句话非常重要是递归结束的标志
mid = split(a,low,high);
quicksort(a, mid+1, high);
quicksort(a, low, mid-1);
}
int main(){
printf("请输入元素个数:");
scanf("%d",&n);
int a[n];
for(int i=0;i<n;i++){
printf("请输入第%d个元素:",i+1);
scanf("%d",&a[i]);
}
quicksort(a,0,n-1);
n = search(a,n,4);
if(n==-1){
printf("未找到关键字。");
}else{
printf("关键字在有序数组中下标为%d",n);
}
return 0;
}
二分查找法,包括快速排序(C语言版)
最新推荐文章于 2022-02-13 21:16:43 发布