1 条题解

  • 0
    @ 2023-10-24 15:37:31

    二分和快排,纯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
    上传者