第一章 排序
第三节 快速排序
快速排序是最常用的排序方法。快排运用的递归方法很有意思。掌握了这种排序方法可以在将来学习递归时更快入门。只是快排的思路与之前的排序方法相比较为复杂,再加担心上我的表达能力会让让大家产生误解,所以推荐大家去看大牛的博客,我只给出代码,如果有不懂的同学,可以在评论留下问题,我会尽快回答的。
#include<stdio.h>
int a[101],n; // 定义全局变量,这两个变量需要在子函数中使用
void quicksort(int left,int right) {
int i,j,t,temp;
if(left>right)
return;
temp=a[left]; // temp中存的就是基准数
i = left;
j = right;
while (i != j) {
// 顺序很重要,要先从右往左找
while (a[j]>=temp && i<j)
j--;
// 再从左往右找
while (a[i]<=temp && i<j)
i++;
// 交换两个数在数组中的位置
if (i<j) { // 当哨兵i和哨兵j没有相遇时
t=a[i];
a[i]=a[j];
a[j]=t;
}
}
// 最终将基准数归位
a[left]=a[i];
a[i]=temp;
quicksort(left,i-1); // 继续处理左边的,这里是一个递归过程
quicksort(i+1,right); // 继续处理右边的,这里是一个递归过程
return;
}
int main() {
int i,j;
// 读入数据
scanf("%d",&n); // n代表有n个数据需要排序
for(i=0;i<n;i++)
scanf("%d",&a[i]);
quicksort(0,n-1); // 快速排序调用
// 输出排序后的结果
for(i=0;i<n;i++)
printf("%d ",a[i]);
return 0;
}
看上去是有点长,但是抽点时间研究下很好懂的。
以上。