快速排序
快速排序是一种交换排序,快排的基本思想是基于分治法的:在待排序表L[1…n]中任取一个元素pivot作为枢轴(或基准),通常取首个元素作为枢轴。通过一趟排序将待排序表划分为独立的两个部分L[1…k-1]和L[k+1,n],并且使得左边部分都比枢轴元素小,而右边部分都比枢轴元素大,而pivot元素最终放在L(k)位置上,这一过程称为一趟快速排序。之后分别递归左半部分和右半部分,直到每一部分内只有一个元素或空为止,即所有元素已有序。
一趟快速排序的过程是一个交替搜索和交换的过程。具体实现方式如下代码所示。
#include<stdio.h>
int Partion(int a[],int low,int high){ //一趟划分过程
int temp;
temp = a[low]; //将表中的第一个元素作为枢轴,并对表进行划分
while(low<high){ //跳出循环的条件
while(low<high&&a[high]>=temp) high--;
a[low] = a[high]; //将比枢轴小的元素放到前面
while(low<high&&a[low]<=temp) low++;
a[high] = a[low]; //将比枢轴大的元素放到后面
}
a[low] = temp; //枢轴元素放到最终位置
return low; //返回存放枢轴元素的最终位置
}
void Quick_sort(int a[],int low,int high){
int pivot;
if(low>=high) return;
pivot = Partion(a,low,high); //划分
Quick_sort(a,low,pivot-1); //依次对两个子表进行递归排序
Quick_sort(a,pivot+1,high);
}
int main(){
int i=0;
int a[11] = {3,6,2,15,24,9,3,10,11,4,13}; //具体实例
Quick_sort(a,0,10);
for(i;i<10;i++){
printf("%d ",a[i]);
}
return 0;
}