// 排序系列--快速排序.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <ctime>//用于调用随机种子函数
#include <stdlib.h>
#include <stdio.h>
#include <iostream>
using namespace std;
//说明:快速排序算法是对冒泡排序的改进,基本思想:在无序序列中选择一个轴值(某个元素)
//,将无序序列分为两个分区,即轴值左侧的元素均小于等于轴值,
//右侧大于等于轴值,然后对每个分区,重复这个过程,直到整个序列有序为止
//VS2010上编译通过
int Partion(int a[],int first,int end)//一趟快速排序
{
int i=first;//first指向分区第一个数值(或元素主键码)
int j=end;//end指向分区最后一个元素
int pivot=a[i];//将分区第一个元素定位为轴值
while(i<j)
{
while ((i<j)&&(a[j]>=pivot))//右侧扫描,判断是否存在小于轴值的元素,如果有,则不执行while,转向下一步,如果没有,记录前移
{
j--;
}
a[i]=a[j];//上面说的下一步(交换)
while((i<j)&&(a[i]<=pivot))//左侧扫描
{
i++;
}
a[j]=a[i];//交换
}
a[i]=pivot;//返回最终轴值所在的位置,因为此时i==j,所以a[j]=pivot;也可以
return i;
}
void QuickSort(int a[],int i,int j)//利用递归的方法执行排序比较简单,因为每个分区所执行的操作都是一样的
{
if (i<j)
{
int pivot=Partion(a,i,j);
QuickSort(a,i,pivot-1);
QuickSort(a,pivot+1,j);
}
}
int _tmain(int argc, _TCHAR* argv[])
{
int a[20];
srand( (unsigned)time(NULL) );
for (int i=0;i<20;i++)
{
a[i]=rand()%40;
}
QuickSort(a,0,19);
for (int i=0;i<20;i++)
{
cout<<a[i]<<" ";
}
system("pause");
return 0;
}