快速排序(QuickSort)的递归实现 。以后可千万别和二分查找(BinarySort)混淆啦
public
class
QuickSort
...
{
public static void quickSort(int[] a, int low, int high) ...{
if (low < high) ...{
int pivotPos = partition(a, low, high);
quickSort(a, low, pivotPos - 1);
quickSort(a, pivotPos + 1, high);
}
}
private static int partition(int[] a, int low, int high) ...{
int pivotVal = a[low];
while (low < high) ...{
while (low < high && a[high] >= pivotVal) ...{
--high;
}
a[low] = a[high];
while (low < high && a[low] <= pivotVal) ...{
++low;
}
a[high] = a[low];
}
a[low] = pivotVal;
return low;
}
private static void printArray(int[] array) ...{
StringBuffer sb = new StringBuffer();
sb.append("[");
for (int i = 0; i < array.length; i++) ...{
if (i == array.length - 1) ...{
sb.append(array[i]);
} else ...{
sb.append(array[i] + ", ");
}
}
sb.append("]");
System.out.println(sb.toString());
}
public static void main(String[] args) ...{
int[] a = ...{ 56, 23, 90, 35, 79, 100, 78, 45, 80 };
int[] b = ...{ 56, 23, 90, 35, 79, 100, 78, 45, 80, 1000 };
System.out.println("Before:");
printArray(a);
printArray(b);
quickSort(a, 0, a.length - 1);
quickSort(b, 0, b.length - 1);
System.out.println("After:");
printArray(a);
printArray(b);
}
}
public static void quickSort(int[] a, int low, int high) ...{
if (low < high) ...{
int pivotPos = partition(a, low, high);
quickSort(a, low, pivotPos - 1);
quickSort(a, pivotPos + 1, high);
}
}
private static int partition(int[] a, int low, int high) ...{
int pivotVal = a[low];
while (low < high) ...{
while (low < high && a[high] >= pivotVal) ...{
--high;
}
a[low] = a[high];
while (low < high && a[low] <= pivotVal) ...{
++low;
}
a[high] = a[low];
}
a[low] = pivotVal;
return low;
}
private static void printArray(int[] array) ...{
StringBuffer sb = new StringBuffer();
sb.append("[");
for (int i = 0; i < array.length; i++) ...{
if (i == array.length - 1) ...{
sb.append(array[i]);
} else ...{
sb.append(array[i] + ", ");
}
}
sb.append("]");
System.out.println(sb.toString());
}
public static void main(String[] args) ...{
int[] a = ...{ 56, 23, 90, 35, 79, 100, 78, 45, 80 };
int[] b = ...{ 56, 23, 90, 35, 79, 100, 78, 45, 80, 1000 };
System.out.println("Before:");
printArray(a);
printArray(b);
quickSort(a, 0, a.length - 1);
quickSort(b, 0, b.length - 1);
System.out.println("After:");
printArray(a);
printArray(b);
}
}