标签:
public class QuickSort { /** * 快速排序的主方法 * @param array :待排序数组 * @param begin :数组第一个元素的下标(其实就是0) * @param end :数组最后一个元素的下标(其实就是数组长度-1) * @return */ public static int[] quickSort(int[] array,int begin,int end ) { if(begin < end){ // 获取主元位置 int k = partitionWithFirst(array, begin, end); // 对主元左边元素进行再次划分 quickSort(array,begin,k-1); // 对主元右边元素进行再次划分 quickSort(array,k+1,end); } return array; } public static int partitionWithFirst(int[] data,int head,int end){ int key=data[head]; //以数组第一个元素,取data[head]为主元key int i= head; int j= end; while(j > i){ //按j--方向遍历目标数组,直到比key小的值为止 while(data[j] >= key && j > i){ --j; } if(i < j){ data[i] = data[j];//data[i]已经保存在key中,可将后面小于key的数data[j]填入i处的位置 i++; } //按i++方向遍历目标数组,直到比key大的值为止 while(i < j && data[i] <= key){ i++; } if(i < j){ data[j] = data[i];//从上面可以看出,data[j]已保存在data[i]中,可将前面的值大于key的书data[i]填入j处的位置 j--; } } data[i] = key;//此时i==j,把主元放回数组 return i; } public static void main(String[] args) { int[] array = {2,8,7,1,3,5,6,4,9}; int len = array.length-1; array = quickSort(array, 0, len); for (int i = 0; i < array.length; i++) { System.out.print(array[i]); } } }
标签:
原文地址:http://www.cnblogs.com/Kevin-mao/p/5902954.html