算法:快速排序
package com.hb.jzoffer; import java.util.Random; import offer.utilities.ArrayUtils; public class QuickSort { public QuickSort() { // TODO Auto-generated constructor stub } //快速排序 (两端交替着向中间扫描) private static int RandomInRange(int min , int max){ if(min < max){ // Random random = new Random(); // int s = random.nextInt(max)%(max - min + 1) + min ; int s = (int)( Math.random() * (max - min) + min ); return s ; }else return -1 ; } public int Partition(int[] data , int start , int end){ int length = data.length; if(data == null || start < 0 || end >= length){ return -1; } //随机产生一个index,将此index里面的数值和最后的数值对换 int index = RandomInRange(start , end ); if(index != -1){ ArrayUtils.exchangeElements(data, index, end); int small = start - 1 ; for(index = start ; index < end ; ++index){ if(data[index] < data[end]){ ++ small; if(small != index){ ArrayUtils.exchangeElements(data, index, small); } } } ++small; ArrayUtils.exchangeElements(data, small, end); return small; }else{ return -1; } } public void QuickSort(int[] data , int length , int start , int end){ if(start == end ){ return ; } int index = Partition(data, start, end); if(index > start){ QuickSort(data, length, start, index -1) ; } if(index < end ){ QuickSort(data, length, index + 1, end); } } public static void main(String[] args) { QuickSort quickSort = new QuickSort() ; int[] data = { 3, 6, 1 ,2, 4 , 5}; int length = data.length; int start = 0 ; int end = length - 1 ; quickSort.QuickSort(data, length, start, end); ArrayUtils.printArray(data); } }