算法理解:
1)选择未排序序列的首元作为基准元素;
2)从右边开始遍历序列直到找到第一个小于基准元素的位置;
交换两个数组元素;
3)从左边开始遍历序列直到找到第一个大于基准元素的位置;
交换两个数组元素;
4)确定基准元素的位置;
5)对基准元素左边的序列进行递归快速排序;
6)对基准元素右边的序列进行递归快速排序;
package com.lulu.leetcode;
public class MyQuickSort {
public void sort(int nums[], int begin, int end) {
int i = begin;
int j = end;
System.out.println("begin=" + i);
System.out.println("end=" + j);
if (begin < end) {//只剩一个元素时,当前子区域遍历结束
int base = nums[begin];
while (i != j) {
// 从右向左遍历,直到找到第一个不大于基准数的位置
while (i < j && nums[j] > base) {
j--;
}
if (i < j) {
nums[i] = nums[j];
i++;
}
// 从左向右遍历,直到找到第一个不小于基准数的位置
while (j > i && nums[i] < base) {
i++;
}
if (i < j) {
nums[j] = nums[i];
j--;
}
}
nums[i] = base;
System.out.println("i=" + i);
outp(nums);
sort(nums, begin, i - 1);//对基准元素左边的子序列快速排序
sort(nums, i + 1, end);//对基准元素右边的子序列进行快速排序
}
// return 0;
}
public void outp(int nums[]) {
String string = "";
for (int i : nums) {
string = string + i + "-->";
// System.out.print(nums+"-->")
}
System.out.println(string);
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
MyQuickSort myQuickSort = new MyQuickSort();
int nums[] = { 99,99 };
// myQuickSort.outp(nums);//(nums);
myQuickSort.sort(nums, 0, nums.length - 1);
myQuickSort.outp(nums);
}
}