1 条题解
-
0
二分和快排,纯c代码
#include<stdio.h> int m[100001]; int binarySearch(int a[], int n, int target) { int l=0,r=n-1; while (l<=r){ int mid=l+(r-l)/2; if (a[mid]==target){ return mid; }else if(a[mid]<target){ l=mid+1; } else { r=mid-1; } } return -1; } void qs(int a[],int left,int right) { if(left<right) { int i=left,j=right,k=a[i];//选择基准元素 while(i<j) { //右边,寻找比基准元素小的值 while(i<j&&a[j]>=k)j--; a[i]=a[j];//将比基准元素小的值放到左边 //左边,寻找比基准元素大的值 while(i<j&&a[i]<=k)i++; a[j]=a[i];//将比基准元素大的值放到右边 } a[i]=k;//将基准元素放到正确的位置 qs(a,left,i-1);// 左半部分排序 qs(a,i+1,right);//右半部分排序 } } int main() { int a; scanf("%d",&a); for(int i=0;i<a;i++) scanf("%d",&m[i]); qs(m,0,a-1); int b; scanf("%d",&b); int index=binarySearch(m,a,b); if(index!=-1){ printf("%d",index); }else{ printf("-1"); } }
- 1
信息
- ID
- 12
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 9
- 标签
- (无)
- 递交数
- 38
- 已通过
- 4
- 上传者