三人行,必有我师,仅仅提供一个思考的方向
- 以下排序结果都为 从小到大
- 快速排序为不稳定排序
- 思想 : 分治法
方法 1
关键过程图 divide()函数
java 代码
/**
* @author jishali
*
*/
public class QuickSort {
public static int divide(int[] array, int l, int r) {
int temp = array[l]; // 轴点元素
while (l < r) {
while (l < r) {
if (temp < array[r]) { // 如果是 <= ,当相同元素较多时,会出现轴点元素temp分布不均匀,
r--;
} else {
array[l] = array[r];
l++;
break;
}
}
while (l < r) {
if (temp > array[l]) {
l++;
} else {
array[r] = array[l];
r--;
break;
}
}
}
array[l] = temp; // 将轴点元素放在最后的坑位
return l;
}
public static void quickSort(int[] array, int l, int r) {
if (l>r) {
return;
}
int middle = divide(array, l, r);
quickSort(array, l, middle - 1);
quickSort(array, middle + 1, r);
}
public static void result(int[] array) {
for (int i : array) {
System.out.print(i + " ");
}
}
public static void main(String[] args) {
int[] array = {3,5,6,2,9,0};
quickSort(array, 0, array.length-1);
result(array);
}
}
方法 2
关键过程图 divide()函数
java 代码
package compare;
public class QuickSort {
public static int divide(int[] array, int L, int R) {
int point = array[R];
int j = L;
for (int i = L; i < R; i++) {
if (array[i] < point) {
int temp = array[j];
array[j] = array[i];
array[i] = temp;
j++;
}
}
int temp = array[j];
array[j] = array[R];
array[R] = temp;
// 查看每一次破风的结果
// for (int re : array) {
// System.out.print(re + " ");
// }
// System.out.println(" : run");
return j;
}
public static void quickSort(int[] array, int l, int r) {
if (l > r) {
return;
}
int middle = divide(array, l, r);
quickSort(array, l, middle - 1);
quickSort(array, middle + 1, r);
}
public static void result(int[] array) {
for (int i : array) {
System.out.print(i + " ");
}
}
public static void main(String[] args) {
int[] array = { 10, 4, 7, 2, 9, 0, 7 };
quickSort(array, 0, array.length - 1);
result(array);
}
}