对于快速排序,各位学编程的童鞋应该都有所耳闻,它是冒泡排序的改进版。
快速排序的效率颇高,因此也收到程序员的青睐。c语言中的排序算法便是用快速排序实现的。
在介绍快速排序之前,我想先介绍一下分治法的思想。百度百科上的解释为:分治法可以通俗的解释为:把一片领土分解,分解为若干块小部分,
然后一块块地占领征服,被分解的可以是不同的政治派别或是其他什么,然后让他们彼此异化。
用我的话来总结就是:通过局部最优解来获得全局最优解。当年图灵便是根据分治法设计出的快速排序。快速排序的具体实现方式是递归,
通过一个基准值(pivot),再经过一次比较之后,确定了基准值的位子。然后便是通过递归来方便对基准值的左边和邮编分别排序。它的具体实现流程如下:
1.定义一个基准值,可以为首个数
2.通过循环比较,将比这个基准值小的数放到它的左边,大的数放到它的右边。
3.重复第二步即可(利用递归)
以下给出例子(java实现):
/**
* 快速排序
*/
public static void main(String[] args) {
int arr[] = {2,5,3,4,1,6,8,9,7};
quickSort(arr,0,arr.length-1);
for (int x =0;x<arr.length-1;x++){
System.out.println(arr[x]);
}
}
public static void quickSort(int[] arr,int low,int high){
if (low<high){
int pivot = partition(arr,low,high);
quickSort(arr,low,pivot-1);
quickSort(arr,pivot+1,high);
}
}
public static int partition(int[] arr,int low ,int high){
int pivot = arr[low];
while(low < high){
while(low<high && arr[high]>pivot){
high--;
}
arr[low]=arr[high];
while(low<high&&arr[low]<pivot){
low++;
}
arr[high]=arr[low];
}
arr[low] = pivot;
return low;
}
希望对您有所帮助!