在此示例中,我們將學(xué)習(xí)在Java中實(shí)現(xiàn)快速排序算法。
在學(xué)習(xí)Java中的快速排序算法之前,請(qǐng)確保您了解快速排序算法的工作原理。
//用Java快速排序
import java.util.Arrays;
class Main {
//根據(jù)數(shù)據(jù)軸劃分?jǐn)?shù)組
int partition(int array[], int low, int high) {
//選擇最后一個(gè)元素作為軸
int pivot = array[high];
//初始化第二個(gè)指針
int i = (low - 1);
//把小于軸的元素放在左邊
//大于樞軸右側(cè)的樞軸
for (int j = low; j < high; j++) {
//將所有元素與pivot進(jìn)行比較
//交換大于pivot的元素
//元素小于pivot
//按降序排序
// if (array[j] >= pivot)
if (array[j] <= pivot) {
//第二個(gè)指針遞增。
//將較小的元素替換為較大的元素
i++;
int temp = array[i];
array[i] = array[j];
array[j] = temp;
}
}
//所以左邊的元素更小
//右邊的元素大于pivot
int temp = array[i + 1];
array[i + 1] = array[high];
array[high] = temp;
return (i + 1);
}
void quickSort(int array[], int low, int high) {
if (low < high) {
//選擇軸位置并將所有元素放小
//左軸大于軸,右軸大于軸
int pi = partition(array, low, high);
//對(duì)軸左側(cè)的元素進(jìn)行排序
quickSort(array, low, pi - 1);
//對(duì)軸右側(cè)的元素進(jìn)行排序
quickSort(array, pi + 1, high);
}
}
public static void main(String args[]) {
//創(chuàng)建一個(gè)未排序的數(shù)組
int[] data = { 8, 7, 2, 1, 0, 9, 6 };
int size = data.length;
//創(chuàng)建Main類的對(duì)象
Main qs = new Main();
//將第一個(gè)和最后一個(gè)索引傳遞給數(shù)組
qs.quickSort(data, 0, size - 1);
System.out.println("排序數(shù)組: ");
System.out.println(Arrays.toString(data));
}
}輸出1
未排序的數(shù)組: [8, 7, 2, 1, 0, 9, 6] 排序數(shù)組: [0, 1, 2, 6, 7, 8, 9]
在這里,數(shù)組的元素按升序排序。 如果我們想要按降序?qū)υ剡M(jìn)行排序,那么在Partition()方法的for循環(huán)中,我們可以將代碼更改為:
//小于符號(hào)更改為大于
if (array[j] >= pivot) {