初学快速排序

本文通过实例详细解析了快速排序的基本思想与步骤,并给出了完整的C语言实现代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

什么都不说,直接举例比上代码容易理解,有一组数:6,1,2,7,9,3,4,5,10,8

以6为基数,左边角标为i,右边为j,从右边开始往左走,遇到比6小的停下,角标变为j,这里开始就是5,然后i再向右走,遇到比6大的停下,这里就是7,角标变为i,交换角标i和j对应的值,变成:6,1,2,5,9,3,4,7,10,8;这时候再继续j先向左走,遇到了4停下,角标变为j,i也同样,这时候再交换角标i和j的值,变为:6,1,2,5,4,3,9,7,10,8;j再同样,这时候遇到了3,i也同样,但这时候i和j相遇了,所以把基数6和这时候j遇到的值交换,变成:3,1,2,5,4,6,9,7,10,8。这样第一小步就完成了,之后再按照同样的步骤,分别变换6左边的和右边的。理解完后,我们再上代码

#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) 
                   { 
                            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);//继续处理右边的 ,这里是一个递归的过程 
} 
int main() 
{ 
    int i,j,t; 
    //读入数据 
    scanf("%d",&n); 
    for(i=1;i<=n;i++) 
                   scanf("%d",&a[i]); 
    quicksort(1,n); //快速排序调用 
                             
    //输出排序后的结果 
    for(i=1;i<=n;i++) 
        printf("%d ",a[i]); 
    getchar();getchar(); 
    return 0; 
} 




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值