题解 | 快速排序
输入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"); } }