双向划分避免所有元素都相等时候的最坏情况
package contcurrentandalgorithm;
/**
*
* @author Administrator
* zyyjiao@mail.ustc.edu.cn
*/
public class Sort3 {
public static void main(String[] args) {
int a[] = {3, 4, 2, 1, 6, 5, 7, 8};
qSort(a, 0, 7);
for (int i = 0; i < 8; i++) {
System.out.print(a[i]);
}
}
private static void qSort(int[] a, int ll, int u) {
if (ll > u) {
return;
}
int t = a[ll];
int i = ll;
int j = u + 1;
for (;;) {
do {
i++;
} while (i <= u && a[i] < t);
do {
j--;
} while (a[j] > t);
if (i > j) {
break;
}
int temp1;
temp1 = a[i];
a[i] = a[j];
a[j] = temp1;
}
int temp2;
temp2 = a[ll];
a[ll] = a[j];
a[j] = temp2;
qSort(a, ll, j - 1);
qSort(a, j + 1, u);
}
}
结果12345678成功构建 (总时间: 0 秒)