快速排序算法---总结笔记

博客介绍了快速排序算法的思想,先选关键值key作为枢轴,将数组首个元素定为key。定义first和last分别代表起始和结束位置,不断比较元素并交换位置,使小于等于key的元素在左,大于等于key的在右。最后以key为界递归实现数组元素有序排列。

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

  • 快速排序算法的思想

    首先选择一个关键值key,作为枢轴。一般会将数组的首个元素选定为key,枢轴。为什么说是枢轴?是因为待会我们要以这个key为界,把所有小于等于key值的数组元素放置到key的左侧;把所有大于等于key值的元素移到数组的右侧。key,充当了一个临界轴的作用,所以叫它枢轴并不为过。

    定义两个变量,first,last,分别代表待排序序列的起始位置和结束位置。

   不断重复这么一个过程:【从序列右侧开始(由last记录的位置),将数组中的元素与key值逐一比较,找到第一个比key小的元素,将其放置到first位置处;从序列左侧开始(由first记录的位置),将数组中的元素与jey值逐一比较,找到第一个比key大的元素,将其放置到last位置处】,直到first==last。通过上述的过程,可以实现把所有小于等于key值的数组元素放置到key的左侧;把所有大于等于key值的元素移到数组的右侧,这么一个功能。

    现在以key枢轴为界,得到了两部分,key左边的所有元素都比key小,key右边的所有元素都比key大。那么怎么实现把数组中所有的元素都有序排列呢?似乎有人已经脱口而出了——利用递归。现在我把代码给大家,新手可以细细体悟。

  • 快速排序的代码

//快速排序。
#include<iostream>
using namespace std;

void QuickSort(int a[], int low, int high){
    if(low >= high){//递归的终止条件。
        return;
    }
    int first = low;
    int last = high;
    int key = a[first];//一般用序列的第一个元素作为枢轴。

    while(first < last){
        while(first < last && a[last] >= key){
            last--;
        }
        a[first] = a[last];//将第一个比key小的元素移到低处。
        while(first < last && a[first] <= key){
            first++;
        }
        a[last] = a[first];//将第一个比key大的元素移到高处。
    }
    a[first] = key;//枢轴元素记录到位。
    QuickSort(a, low, first-1);//以枢轴为界划分两极。低一极。
    QuickSort(a, first+1, high);//以枢轴为界划分两极。高一极。
}
int main()
{
    int a[] = {57, 68, 59, 52, 72, 28, 96, 33, 24};
    QuickSort(a, 0, sizeof(a)/sizeof(a[0])-1);//快速排序
    for(int i = 0; i < sizeof(a)/sizeof(a[0]); i++){
        cout<<a[i]<<" ";
    }
    return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值