快速排序的关键在于要在数组中选择一个数作为一个标志位,然后通过和这个标志位的比较,来把数组分成两部分,一部分比这个标志位的值小,另一部分比这个标志位的值大,再之后继续同样的操作来对两个部分进行排序,直到最后剩下一个数,我们可以写出这些步骤的具体实现,再利用递归来将每次排序完成。笔者今天看到一段视频,很形象也很有趣的将快速排序向我们展示出来:
http://url.cn/5RgeoYV
接下来我们来用代码实现快速排序:
public class QuickSort {
public static void main(String[] args) {
int arr[]={5,6,1,2,8,3,4,9,7};
quicksort(arr,0,arr.length-1);
System.out.println(Arrays.toString(arr));
}
private static int getbase(int[] arr, int fir, int end) {
int temp=arr[fir];
while (fir<end){
//当end位置的值大于temp时,end向前移动一位
while (fir<end&&arr[end]>=temp){
end--;
}
arr[fir]=arr[end];
while (fir<end&&arr[fir]<=temp){
fir++;
}
arr[end]=arr[fir];
}
//将最后的标志位赋给fir,这样一次排完之后fir两端分成大于和小于fir的两部分
arr[fir]=temp;
return fir;
}
//递归求之
private static void quicksort(int[] arr, int fir, int end) {
//设定退出循环条件
if (fir<end){
int base=getbase(arr,fir,end);
quicksort(arr,fir,base-1);
quicksort(arr,base+1,end);
}
}