题解 | 快速排序

输入n个整数,输出其中最小的k个

http://www.nowcoder.com/practice/69ef2267aafd4d52b250a272fd27052c

/*快速排序(使用递归)*/
#include<stdio.h>

void quicksort(int arr[],int l,int r){
    if(l>=r)
    return ;
    int x=arr[(l+r)>>1];    //使用最中间的进行比较,对于本题,大于x的在左侧,小于x的在右侧     //不要忘了加int
    int i=l-1;         //防止越界
    int j=r+1;
    while(i<j){        //递归内部的判断条件 当i=j=x时退出循环
        do{            //找到需要更换位置的元素
          i++;                       //不要忘了分号
        }while(arr[i]<x);           //do……while语句结尾要有分号
        do{
            j--;
        }while(arr[j]>x);
        //交换
        if(i<j){
            int tmp=arr[i];
            arr[i]=arr[j];
            arr[j]=tmp; 
    }

}
    quicksort(arr,l,i-1);   //i-1 和 j+1而不是用x 表示
    quicksort(arr,j+1,r);

}

int main(){
    int n,k;
    while(scanf("%d %d\n",&n,&k)!=EOF){
        int *a=(int *)malloc(sizeof(int)*n);
        for(int i=0;i<n;i++){
            scanf("%d ",&a[i]);
        }
        quicksort(a,0,n-1);
        for(int i=0;i<k;i++){
            printf("%d ",a[i]);
        }
        printf("\n");
    }
}
全部评论

相关推荐

程序员牛肉:小牛肉来也! 基本破不了局了,我给你的建议是适当放弃秋招,投递大厂的日常实习之后赶明年的春招。 在没有实习的情况下,你的项目经历给面试官的作用就是提供提问点方便面试官来提问八股以及场景题而已。因此你现在简历的写法不太对,要着重突出项目中使用的技术点,而不是像你现在这个写的很宽泛。 最好是“基于xxxx技术解决了xxxx问题,解决了xxxx边缘场景问题”。最好是这样写,方便面试官对你的简历进行提问。 最后的最后,问题其实不在你。今年的秋招确实比较寒冬一点,所以找不到是正常的。要做好打持久战的准备。
Java学习交流
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务