经典排序算法之——06 快速排序
Posted 青少年信息学交流
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了经典排序算法之——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 快速排序的主要内容,如果未能解决你的问题,请参考以下文章