快速排序是对冒泡排序的改进。他的思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
例子:
public class Test2
{
/**
* JAVA排序算法实现代码快速排序。
*/
public static int[] a = { 5, 7, 12, 0, 4, 3 }; // 预设数据数组
public static void main(String args[]) {
System.out.print("快速排序前: ");
for (int i = 0; i < a.length; i++)
System.out.printf("%3s",a[i]);
System.out.println("");
int Index = a.length;
Quicksort(0, Index - 1, Index); // 快速排序
// 排序后结果
System.out.print("快速排序后: ");
for (int i = 0; i < a.length; i++)
System.out.printf("%3s", a[i]);
System.out.println("");
}
public static void Quicksort(int Left, int Right, int Index) {
int i, j, k; // 循环计数变量
int Pivot; // 枢纽变量
int Temp; // 暂存变量
i = Left; // 设定左指针
j = Right; // 设定右指针
Pivot = a[Left]; // 取最左边的元素
if (i < j) {
do {
while (a[i] <Pivot && i < Right) // 从左往右找比Pivot大的值
{
i++;
}
while (a[j] > Pivot && j > Left) // 从右往左找比Pivot小的值
{
j--;
}
if (i < j) // 交换a[i]和a[j]
{
Temp = a[i];
a[i] = a[j];
a[j] = Temp;
}
} while (i < j);
if (i > j) {
Temp = a[Left]; // 交换a[Left]和a[j]
a[Left] = a[j];
a[j] = Temp;
// 打印目前排序结果
System.out.print("排序中: ");
for (k = 0; k <= Index; k++) {
System.out.printf("%3s", a[k]);
}
System.out.println("");
}
Quicksort(Left, j - 1, Index); // 排序左半边
Quicksort(j + 1, Right, Index); // 排序右半边
}
}
}
|