1.结束条件: low = high
2.快速排序要分而治之。故需要分的位置,位置便是当前元素经过排列后应该所在的位置。
3.对于单次的排列,都使得一个元素排在了正确的位置,她的左面比她小,右侧比她大。
package com.jue.quicksort;
public class Quicksort {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
int data[] = { 8, 3, 7, 1, 5, 6, 4, 9, 2 };
logs("old : ", data);
quickSort(data, 0, data.length - 1);
logs("new : ", data);
}
static void logs(String str, int[] data) {
StringBuffer sb = new StringBuffer(str);
for (int value : data) {
sb.append(value + " ");
}
System.out.println(sb);
}
public static void quickSort(int[] data, int low, int high) {
if (low >= high) {
return;
}
int index = getSortedIndex(data, low, high);
quickSort(data, low, index - 1);
quickSort(data, index + 1, high);
}
private static int getSortedIndex(int[] data, int low, int high) {
int currentData = data[low];
int currentDataIndex = low;
while (low < high) {
if (currentDataIndex == low) {
if (currentData > data[high]) {
data[low] = data[high];
data[high] = currentData;
currentDataIndex = high;
low++;
} else if (currentData <= data[high]) {
high--;
}
} else if (currentDataIndex == high) {// move to left
if (currentData < data[low]) {//
data[high] = data[low];
data[low] = currentData;
currentDataIndex = low;
high--;
} else if (currentData >= data[low]) {
low++;
}
}
}
return currentDataIndex;
}
}
输出的结果
17万+

被折叠的 条评论
为什么被折叠?



