经典排序算法之——06 快速排序

Posted 青少年信息学交流

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了经典排序算法之——06 快速排序相关的知识,希望对你有一定的参考价值。

请点击上面微信号关注精彩内容 提高计算思维,传播编程知识,点亮未来人生!经典排序算法之——06 快速排序



快速排序(Quick Sort)


         快速排序是一种改进的交换排序。 

6.1 算法描述

  • * 任取一个元素(第一个、最后一个或中间)为中枢轴(基数);
  • * 所有比它小的元素一律放到它的前面,不小于它的元素一律放到它的后面,得到左右两个子序列;
  • * 对各个子序列重新选择中心元素并依次规划调整(递归思想);
  • * 直到每个子序列的元素只剩一个。

6.2 代码实现


#include <iostream>
using namespace std;
int arr[1000001];

void quick_sort(int arr[],int left,int right) //快排函数,传入数组、左边界、右边界 
{
    if(left>=right)  return ; //若左边界(指针)超过或等于右边界(指针), 结束 
    int i=left,j=right; //定义左指针、右指针(相当于哟!不是真正意义上的指针) 
    int pivot=arr[i]; //把第一个位置作为中枢值(或者是基数)同时赋给变量pivot 
    while(i<j)  //若左指针小于右指针,就一直循环 
    {
        while(i<j && arr[j]>=pivot) j--; // 若左指针小于右指针同时右边的数比中枢值大,右指针向左移动 
        arr[i]=arr[j];// 这时右边的数比中枢值小,我们就把这个数放到左边i的位置(相当于把比中枢值小的数放到它的左边) 
        while(i<j && arr[i]<=pivot) i++;// 若左指针小于右指针同时左边的数比中枢值小,左指针向右移动 
        arr[j]=arr[i];// 这时左边的数比中枢值大,我们就把这个数放到右边j的位置(相当于把比中枢值大的数放到它的右边) 
    }
    arr[i]=pivot;  //这时,一趟结束,i==j,我们要把中枢值重新放到i所指的位置 
    quick_sort(arr,left,j-1); // 递归调用,左边排序 
    quick_sort(arr,j+1,right); //递归调用,右边排序 
}
int main()
{
    int n,left,right;
    cin>>n; //输入待排序数的个数 
    for(int i=1;i<=n;i++)  //输入数组中每一个数 
    {
        cin>>arr[i];
    }

    quick_sort(arr,1,n);  //调用快排函数 
    for(int i=1;i<=n;i++)  //输出排序后的数组 
    {
        cout<<arr[i]<<" ";
    } 
    cout<<endl;// 到这就 OK了 
    return 0;
}


经典排序算法之——06 快速排序



                   

◆ “智能”是这个时代的主题,我们每天使用的手机软件,本质上是计算机程序;即将普及的“无人驾驶汽车”、“无人超市”,背后也是计算机程序。人工智能将逐步替代人类工作,我们应该让孩子走在这时代的浪潮前沿。

 ◆ 因为编程如此重要,所以全国的重点大学、高中都很看重具有编程能力的学生。获得信息学竞赛省级及以上级别奖项的学生,可获得全国重点大学保送自主招生资格

◆ 学习编程的最佳入门时期是:四、五、六年级和初一

如果您对信息学编程有一定的兴趣,数学基础好,我们会给你一个美好的未来人生!







更多精彩内容,请扫描二维码关注!

     

提高计算思维,编程创造未来!

                                                                                                         



以上是关于经典排序算法之——06 快速排序的主要内容,如果未能解决你的问题,请参考以下文章

经典排序算法之快速排序详解

经典算法之快速排序

经典排序算法之快速排序

Scratch之十大经典排序算法-快速排序

白话经典算法系列之六 快速排序 快速搞定 转

经典排序算法之归并排序