快速排序属于交换类排序,是对冒泡排序的一种改进。基本思想基于分治法:在待排序表中任取一个元素pivot作为基准,通过一趟排序将排序表划分为两部分,使得大于pivot的元素在一个表中,小于pivot的元素在一个表中,pivot放在最终位置,这是一趟快排。
而后分别递归的对两个子表重复上述过程,直至每部分内只有一个元素或空为止,即所有元素放在了其最终位置上。
//快速排序:low=0,high=strlen(a)-1
int Partition(int a[],int low,int high){
int pivot=a[low];//将第一个记录设为枢轴
while(low<high){//循环跳出条件
while(low<high&&a[high]>=pivot) --high;
a[low]=a[high];//将比数轴值小的元素移动到左端
while(low<high&&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 pivotpos=Partition(a,low,high);//划分
QuickSort(a,low,pivotpos-1);//对两个子表递归排序
QuickSort(a,pivotpos+1,high);
}
}