算法之路_10、经典快速排序

一、算法思路

快速排序(Quicksort)是对冒泡排序的一种改进。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。在本篇中采用以数组最后一位数作为中轴,通过一次partition将数组分为两部分,左边区域小于等于该数字,右边区域大于该数字。(参见算法之路_8、数组切分问题),再对左右部分依次进行切分步骤,直至整体有序。

二、代码+注释

package algorithm_02;

import logarithmic_device.Sort_logarithmic_device;


public class QuickSort {
	
	//经典快排 以最后一位数作分界  小于等于放左边 大于放右边 递归左右 直至整体有序
	public static void classicalQuickSort(int arr[]){
		if (arr==null||arr.length<2) {
			return;
		}
		classicalQuickSort(arr,0,arr.length-1);
	}
	private static void classicalQuickSort(int[] arr, int L, int R) {
		if (Larr[R]){//当前数比最后一位大时 与大范围得前一位交换
				Sort_logarithmic_device.swap(arr, L, --more);
			}else{//小于等于等当前数字游标向前扩大一位
				L++;
			}
		}
		//最后将大范围得第一个数字与数组最后一位交换。确定最后一个数字得位置并返回
		Sort_logarithmic_device.swap(arr, L, R);
		return L;
	}
	public static void main(String[] args) {
		int arr[]={1,0,-9,-9,-9,8,5,6,10,-2};
		classicalQuickSort(arr);
		for (int i = 0; i < arr.length; i++) {
			System.out.print(arr[i]+" ");
		}

	}

}

 

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