快速排序介绍(简称快排)
快速排序(Quick Sort)是一种高效的排序算法,属于“交换排序”类的算法。它的基本思想是:通过一趟排序将待排记录分割成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,然后再分别对这两部分记录继续进行排序,以达到整个序列有序的目的。具体来说,快速排序的实现分为如下步骤:
- 设三个游标:left,right和基准数(基准数一般取中间数middle,方便理解)
- 循环{判断(交换),游标自增}
- 递归
qsort算法思想(建议对照下面代码看)
- q_sort()给入两个游标
- {
- 定义i=左游标,j=右游标,基准=中间数;
- do{
- 循环(a[i]<基准){i自增;}
- 循环(基准<a[j]){j自减;}
- 若(i<=j ){
- 交换; //因为是从小到大排,左边应是小的,右边是大的,两边都不符合时把左边扔到右边,右边扔到左边
- i,j自增;
- }
- }循环(i<=j)
- 递归;
- 递归;
- }
代码
#include<bits/stdc++.h>
using namespace std;
int a[10];
//=======================快速排序===========
void q_sort(int l,int r)
{
int i=l,j=r,mid=a[(i+j)/2];
do{
while(a[i]<mid){i++;}
while(mid<a[j]){j--;}
if(i<=j){
swap(a[i],a[j]);
i++;j++;
}
}while(i<=j);
if(l<j)q_sort(l,j);
if(i<r)q_sort(i,r);
}
int main()
{
int b;
for(b=0;b<=9;b++)
{
cin>>a[b];
}
int l=0,r=9;
q_sort(l,r);
for(b=0;b<=9;b++)
{
cout<<a[b]<<" ";
}
}
有关快排就讲到这吧,一定要上手操作一下!
(有问题还请大佬们多多指教)