快速排序算法是冒泡排序算法的升级版,他的效率是极高的,基本思想使用了分治策略,通过一趟排序将数组分成两个小数组,其中一部分比另一部分的数据小,然后递归的对子序列进行排序,直到完成整个数据的排列。
基本步骤是:
将数组中的一个作为轴(一般选择第一个)然后从数组的最后一个开始和这个轴进行比较,如果比轴大,就放在原处不动,进行下个数据的比较,直到找到一个比轴小的数,然后进行替换;接下来从第一个数开始和这个轴进行比较,如果比轴小,就放在原处,进行下个数据的比较,直到找到一个比轴大的数,然后进行替换;
举个例子: 8,9,1,4,2,9,3
轴为:8
i:0
j:6
第一次比较:3<8 替换 3,9,1,4,2,9,8 i:0 j:6
第二次比较:3<8 i:1 j:6 9>8 替换 3,8,1,4,2,9,9
第三次比较:9>8 i:1 j:5 9>8 i:1 j:4 2<8 替换 3,2,1,4,8,9,9
第四个比较:2<8 i:2 j:4 1<8 i:3 j:4 4<8 i:4 j:4 第一趟结束 分成两组,继续递归
#include <iostream>
using namespace std;
void _quick_sort(int *a,int left,int right)
{
if(left<right)
{
int key=a[left];
int low=left;
int high=right;
while(low<high)
{
while(low<high && a[high]>key)
high--;
swap(a[low],a[high]);
while(low<high && a[low]<key)
low++;
swap(a[low],a[high]);
}
_quick_sort(a,left,low-1);
_quick_sort(a,low+1,right);
}
}
void swap(int &a, int &b)
{
int temp=0;
temp=a;
a=b;
b=temp;
}
void main()
{
int ia[]={8,9,1,4,2,6,3};
_quick_sort(ia,0,6);
for(int i=0;i<7;i++)
{
cout<<ia[i]<<endl;
}
}