#快速排序是对起泡排序的一种改进。
快速排序的基本思想:通过一趟排序将待排记录分割成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,
然后分别对这两部分进行上述排序,直到整个序列有序。
#本博客采用如下顺序存储,0号单元留空
typedef struct
{
int *r;
int length;
int listsize;
}SqList;//定义顺序表结构体类型
#快速排序以及解析
int Partition(SqList &L,int low,int high)//对顺序表L进行一趟快速排序
{
L.r[0]=L.r[low];//将第一个值赋值给0号单元,用0号单元做枢轴的暂存位置
while(low<high)//当low指针小于high指针时
{
while(low<high&&L.r[high]>=L.r[0]) //从后往前找,直到找到第一个小于枢轴的元素
{
high--;
}
L.r[low]=L.r[high];//将该元素赋值到枢轴位置,现在high指针所指位置变为枢轴位置
while(low<high&&L.r[low]<=L.r[0])//从前往后找,直到找到第一个大于枢轴的元素
{
low++;
}
L.r[high]=L.r[low];//将该元素赋值到枢轴位置,现在low指针所指位置变为枢轴位置
}//当low指针等于high指针时,循环结束
L.r[low]=L.r[0];//将0号单元存放的枢轴值放入枢轴位置
return low;//返回枢轴位置
}
void QSort(SqList &L,int low,int high)//对顺序表L,从low位置到high位置递归地进行快速排序
{
int pivotloc;//声明枢轴变量
if(low<high)//当进行快速排序的序列长度大于一时(递归出口)
{
pivotloc=Partition(L,low,high);//对顺序表L进行一趟快速排序,用其返回值为枢轴变量赋值
QSort(L,low,pivotloc-1);//对顺序表L,从low位置到pivotloc-1位置递归地进行快速排序
QSort(L,pivotloc+1,high);//再对顺序表L,从pivotloc+1位置到high位置递归地进行快速排序(递归规律)
}
}
void QuickSort(SqList &L)//对顺序表L进行快速排序
{
QSort(L,1,L.length);//对顺序表L从第一个元素到最后一个元素递归地进行快速排序
}
#测试结果
#本博客参考了《数据结构(C语言版)》(严蔚敏,吴伟民编著)