java里面快速排序_Java:快速排序
快速排序相當于冒泡排序的進化版本,優點是速度比冒泡排序更快,缺點是寫起來邏輯比冒泡排序啰嗦一點,沒那么直觀。
快速排序之所以比較快,是因為相比冒泡排序,每次交換是跳躍式的。每次排序的時候 設置一個基準點,將小于等于基準點的數全部放到基準點的左邊,將大于等于基準點的數全 部放到基準點的右邊。這樣在每次交換的時候就不會像冒泡排序一樣只能在相鄰的數之間進 行交換,交換的距離就大得多了。因此總的比較和交換次數就少了,速度自然就提高了。當 然在最壞的情況下,仍可能是相鄰的兩個數進行了交換。因此快速排序的最差時間復雜度和 冒泡排序是一樣的,都是 O(N2),它的平均時間復雜度為 O (NlogN)
下圖是對:6 1 2 7 9 3 4 5 10 8進行快速排序的描述圖
題目:
輸入一串沒有順序的數字,對這串數字進行升序排序,并輸出
package _4_9_test;
import java.util.ArrayList;
import java.util.Scanner;
/*快速排序法
*
* */
public class EightyEight {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int num[] = new int[n];
for (int i = 0; i < n; i++) {
num[i] = scanner.nextInt();
}
quitSort(num, 0, n - 1);
for (int i : num) {
System.out.print(i + " ");
}
}
public static void quitSort(int num[], int getLeft, int getRight) {
int left, right, t;
// 左右起始的位置
left = getLeft;
right = getRight;
// 如果左右的位置發生了交錯,說明當前序列的循環結束了
if (left > right) {
return;
}
// 用于存放基準位
int temp;
// 選擇序列的第一個數作為基準位
temp = num[left];
// 當左右位置還沒碰面時
while (left < right) {
// 從序列的右邊往左走,如果數字大于基準位,則繼續走,直到碰到小于基準位的數字
while (left < right && temp <= num[right]) {
right--;
}
// 從序列的左邊往右走,如果數字小于基準位,則繼續走,直到碰到大于基準位的數字
while (left < right && temp >= num[left]) {
left++;
}
// 將左邊大于基準位的數和右邊小于基準位的數進行位置互換
t = num[right];
num[right] = num[left];
num[left] = t;
}
if (left >= right) {
// 序列中數字位置對調結束后,將基準位歸位
num[getLeft] = num[left];
num[left] = temp;
}
// 遞歸
// 對基準位左邊的序列重復執行上面的步驟
quitSort(num, getLeft, left - 1);
// 對基準位右邊的序列重復執行上面的步驟
quitSort(num, left + 1, getRight);
}
}
總結
以上是生活随笔為你收集整理的java里面快速排序_Java:快速排序的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql 1个月多少天_在MySQL日
- 下一篇: java readtimeout_Jav