题解 | 快速排序

输入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");
    }
}
全部评论

相关推荐

05-09 12:23
已编辑
华南理工大学 Java
野猪不是猪🐗:给他装的,双九+有实习的能看的上这种厂我直接吃⑨✌们拿它练练面试愣是给他整出幻觉了
点赞 评论 收藏
分享
qq乃乃好喝到咩噗茶:院校后面加上211标签,放大加粗,招呼语也写上211
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

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