public class QuickSort {
public int Division(int a[], int left, int right) {
// 取左侧元素为基准元素
int base = a[left];
while (left < right) {
// 从右向左找第一个比基准小的元素
while (left < right && a[right] > base) {
--right;
}
swap(a, left, right);
while (left < right && a[left] < base) {
++left;
}
swap(a, right, left);
}
return left;
}
private void swap(int[] arrays, int i, int j) {
int temp;
temp = arrays[i];
arrays[i] = arrays[j];
arrays[j] = temp;
}
// 快速排序
public void NQuickSort(int a[], int left, int right) {
int i;
if (left < right) {
i = Division(a, left, right);
NQuickSort(a, left, i - 1);
NQuickSort(a, i + 1, right);
}
}
}
public int Division(int a[], int left, int right) {
// 取左侧元素为基准元素
int base = a[left];
while (left < right) {
// 从右向左找第一个比基准小的元素
while (left < right && a[right] > base) {
--right;
}
swap(a, left, right);
while (left < right && a[left] < base) {
++left;
}
swap(a, right, left);
}
return left;
}
private void swap(int[] arrays, int i, int j) {
int temp;
temp = arrays[i];
arrays[i] = arrays[j];
arrays[j] = temp;
}
// 快速排序
public void NQuickSort(int a[], int left, int right) {
int i;
if (left < right) {
i = Division(a, left, right);
NQuickSort(a, left, i - 1);
NQuickSort(a, i + 1, right);
}
}
}