快速排序(排序算法)

一.原理
将数组的第一个数设为中轴,将小于轴的数字移到左边,大于轴的数字移到右边(从大到小的排序刚好相反),这样数组就被分为三个部分,左子数组,轴,右子树组,用上述办法递归左右子树,数组元素为0或1时,我们认为它是有序的,就是递归的结束条件,这样就实现了一个数组的快速排序。
二.
例子:数组arr[10]={1,3,5,7,2,4,8,9,6,10}
代码和注释:


#include<cstdio>
#include<iostream>
using namespace std;
void quicksort(int num[],int left ,int right)
{
    if(left<right){
        int pivot=num[left];//将第一个数字设为轴
        int i=left;
        int j=right;
        while(i<j){//i向左移动,j向右移动,直到指向同一个位置
            while(i<j&&num[j]>pivot){//j从后向前移动,找到第一个小于或者等于pivot的数字放到i的位置上
                j--;
            }
            num[i]=num[j];
            while(i<j&&num[i]<pivot){//i从前向后移动,找到第一个大于或者等于pivot的数字放到j的位置上
                i++;
            }
            num[j]=num[i];
        }
        num[i]=pivot;//此时i和j同时指向同一个位置,也可以写成写成num【j】=pivot;
        quicksort(num, left, j-1);//对左边进行快排,当然,当左边没有原素或者只有一个元素时我们默认其为有序的;
        quicksort(num, i+1, right);//对右边进行快排,右边同理;
    }else{
        return ;
    }
    
}
int main(){
    int arr[10]={1,3,5,7,2,4,8,9,6,10};
    quicksort(arr, 0, 9);
    for(int i=0;i<10;i++){
        cout<<arr[i]<<" ";
    }
    return 0;
}


三.运行结果
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

离婚带一娃要你管

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

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

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

打赏作者

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

抵扣说明:

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

余额充值