算法之路_11、优化后的快速排序

一、优化

使用之前介绍过的 算法之路_9、荷兰国旗问题 来改进经典快速排序。上一篇快排讲到得是将数组分割成两部分,直至全部有序。而荷兰国旗问题则是将一个数组分成三部分,左边小于比较数字,中间等于比较数字,右边大于比较数字。所以,采用荷兰国旗思想来改进快排,可以在一定情况下减少比较次数(中间等于部分)。

二、代码+注释

package algorithm_02;

import logarithmic_device.Sort_logarithmic_device;

public class QuickSort {

	public static void quickSort(int arr[]){
		
		if (arr==null||arr.length<2) {
			return;
		}
		
		quickSort(arr,0,arr.length-1);
		
	}
	public static void quickSort(int[] arr, int L, int R) {
		if(Larr[R]) {
				//若当前数字比比较数字大 则与大范围得前一位交换 并且大范围扩大一位
				Sort_logarithmic_device.swap(arr, L, --more);
			}else{
				//若相等 则游标右移 大范围小范围均不做变化
				L++;
			}
		 }
		 return new int[]{less+1,more-1};//返回等于比较数字区域范围
	}
	
	
	public static void main(String[] args) {
		int arr[]={1,0,-9,-9,-9,8,5,6,10,-2};
		quickSort(arr);
		
		for (int i = 0; i < arr.length; i++) {
			System.out.print(arr[i]+" ");
		}

	}

}

 

你可能感兴趣的:(算法之路)