快速排序
快速排序
模板
模板每次选取的枢轴元素为中间的值
//快速排序算法
void quickSort(int a[],int l,int r){
//递归边界判断
if(l>=r) return ;
//初始化指针
//这里-1和+1是因为后面代码使用了do-while循环结构
int i=l-1,j=r+1,x=a[i+j>>1];
while(i<j){
do i++; while(a[i]<x);
do j--; while(a[j]>x);
if(i<j) swap(a[i],a[j]);
}
//递归处理子问题
quickSort(a,l,j),quickSort(a,j+1,r);
}
数据结构课本算法
下面给出的算法没有经过改进,对于基本已经排好序的待排序列来说,算法复杂度较高
可以对下面的算法进行改进,每次选取的枢轴元素为随机选取或者取中间的值
int Partition(int a[],int low,int high){
int pivot=a[low];
while(low<high){
while(a[high]>pivot) high--;
a[low]=a[high];
while(a[low]<pivot) low++;
a[high]=a[low];
}
a[low]=pivot;
return low;
}
void quickSort(int a[], int low, int high)
{
if(low<high){
int pivot=Partition(a,low,high);
quickSort(a,low,pivot-1);
quickSort(a,pivot+1,high);
}
}
浙公网安备 33010602011771号