快速排序是对冒泡排序的改进,改进的重点是:在冒泡排序中记录的比较和移动是在相邻位置进行的,记录每次交换只能前移或者后移一个位置,所以总的比较次数和移动次数比较多。快速排序中,记录的比较和移动是从两端向中间进行的,关键码较大的记录一次就能从前面移动到后面,关键码较小的记录一次就能从后面移动到前面,记录移动的距离较远,从而减小了总的比较次数和移动次数。
基本思想:首先选取一个轴值,将待排序的记录分割为独立的两个部分,左侧记录的值要小于等于轴值,右侧的值要大于等于轴值,然后对左右两部分重复上述操作,直到整个序列有序。
下面是C++实现:
/*************************************************************************
> File Name: test.cpp
> Author: Shorey
> Mail: shoreybupt@gmail.com
> Created Time: 2015年04月02日 星期四 17时01分27秒
************************************************************************/
#include<iostream>
using namespace std;
int Partition(int a[],int first,int last)//快速排序划分函数
{
int f=first;
int l=last;
int tmp;
while(f!=l)
{
while(f!=l&&a[f]<=a[l])
l--;
if(f<l)
{
tmp=a[f];
a[f]=a[l];
a[l]=tmp;
f++;
}
while(f!=l&&a[f]<=a[l])
f++;
if(f<l)
{
tmp=a[f];
a[f]=a[l];
a[l]=tmp;
l--;
}
}
return f;
}
void QuickSort(int a[],int first,int last)//快速排序
{
int p;
if(first<last)
{
p=Partition(a,first,last);
QuickSort(a,first,p-1);
QuickSort(a,p+1,last);
}
}
int main()
{
int a[5]={4,2,1,6,3};
QuickSort(a,5);
return 0;
}