#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;
}
int binary_searcher(int arr[],int l,int r,int target){/*二分查找法的非递归实现*/
while(l<=r){
int mid = (r-l)/2+l;
if(arr[mid]==target){
return mid;
}else if(arr[mid]<target){
l=mid+1;
}else{
r=mid-1;
}
}
return -1;
}
int main(){
int n=1000;
int a[n];
srand(time(NULL));/*随机数种子*/
for(int i=0;i<n-1;i++){
a[i]=rand();/*生成随机数*/
}
int target=100;/*要查找的数*/
a[n-1]=target;/*将带查找的数存入数组*/
_print(a,n);
printf("\n\n");
quickSort(a,0,n-1);/*对数组排序*/
_print(a,n);
printf("\n\n");
int index=binary_searcher(a,0,n-1,target);/*查找下标*/
printf("经查找得%d的下标为%d",target,index);
return 0;
}
C语言实现二分查找法的非递归方法
最新推荐文章于 2024-04-20 10:47:19 发布