#include<stdio.h>
#include<stdlib.h>
void _print(int arr[],int n){
for(int i=0;i<n;i++){
printf("%d\t",arr[i]);
if((i+1)%10==0){
printf("\n");
}
}
}
void swap(int arr[],int i,int j){
int temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
void quickSort(int arr[],int l,int r){/*快速排序法*/
if(l>=r){
return;
}
int p=quickSort2(arr,l,r);
quickSort(arr,l,p-1);
quickSort(arr,p+1,r);
}
int quickSort2(int arr[],int l,int r){/*双路快速排序*/
int p=rand()%(r-l+1)+l;
swap(arr,l,p);
int i=l+1,j=r;
while(1){
while(i<=j&&arr[i]<arr[l]){
i++;
}
while(i<=j&&arr[j]>arr[l]){
j--;
}
if(i>=j){
break;
}
swap(arr,i,j);
i++;
j--;
}
swap(arr,l,j);
return j;
}
//寻找数组中大于target的最小元素的索引
int binary_searcher(int arr[],int l,int length/*数组的长度*/,int target){
int r=length;
while(l<r){
int mid=(r-l)/2+l;
if(arr[mid]<=target){
l=mid+1;
}else{
r=mid;
}
}
return r;/*如果r最终等于length说明数组中没有大于target的元素*/
}
int main(){
int n=10;
int a[n];
srand(time(NULL));/*随机数种子*/
for(int i=0;i<n;i++){
a[i]=46+rand()%55;
}
_print(a,n);
printf("\n\n");
quickSort(a,0,n-1);/*对数组排序*/
_print(a,n);
printf("\n\n");
int target=60;/*60在实际应用中可视为及格的学生中的最低分*/
int index=binary_searcher(a,0,n,target);/*查找下标*/
printf("经查找得大于%d的最小元素下标为%d",target,index);
return 0;
}
C语言用二分查找法实现查找数组中大于目标值的最小元素的下标索引(如应用于查找及格学生(大于60分)中的最低分数)
最新推荐文章于 2022-12-26 11:21:55 发布