快速排序

                                                                                                                    
快速排序的思想:
1:先确定开头下标和最后的下标。
2:然后在取一个值x,来划分界限。
3:如果大于等于x,放在x的右边,如果小于等于x,就放在x的左边。
同时下标开始移动,然后在将不符合条件的两个值进行交换,判断开头的下标是否小于等于最后的下标,如果是则停止。
4:然后进行递归,讲数据以x为中心,分为前部分和后部分。
代码如下:
 
#include<stdio.h>
#define N 4
int q[N];

void quick_sort(int q[],int start,int end){
    int x=q[start];// 找一个了来当中间值
    int i=start-1;//从开头
    int j=end+1;//从最后
    int temp;
    //如果开始start就大于end的话,就不用查找了,直接跳出循环。
    if(start>=end){
        return;
    }
    while(i<j){//如果i++,j--,一直动,直到i>j,就跳出循环。
        do{
            //如果q[i]小于的x的话,就i++,直到找到大于x的值。
            i++;
        }while(q[i]<x);
        do{
            //如果q[j]小于的x的话,就j--,直到找到小于x的值
            j--;
        }while(q[j]>x);
        if(i<j){
            //交换两个数的位置
            temp=q[i];q[i]=q[j];q[j]=temp;
        }
    }
    quick_sort(q,start,j);//给前半部分排序
    quick_sort(q,j+1,end);//给后半部分排序
}
main(){
    int i;
    //给数组里面赋值
    for(i=0;i<N;i++){
        scanf("%d",&q[i]);
    }
    //调用排序方法
    quick_sort(q,0,N-1);
    //输出排序后的数组
    for(i=0;i<N;i++){
        printf(" %d ",q[i]);
    }
}

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hickey啦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值