#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){/*二分查找法的递归实现*/
if(l>r){
return -1;
}
int mid=(r-l)/2+l;/*(r+l)/2在数据极多时可能会溢出*/
if(arr[mid]==target){
return mid;
}
if(arr[mid]<target){
return binary_searcher(arr,mid+1,r,target);
}
return binary_searcher(arr,l,mid-1,target);
}
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;
}
#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){/*二分查找法的递归实现*/
if(l>r){
return -1;
}
int mid=(l+r)/2;
if(arr[mid]==target){
return mid;
}
if(arr[mid]<target){
return binary_searcher(arr,mid+1,r,target);
}
return binary_searcher(arr,l,mid-1,target);
}
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;
}