演算法 快速排序(Java)

2021-08-30 02:17:47 字數 2939 閱讀 2278

三、快速排序**實現和效率

首先,在這一串數字中挑乙個基準數,作為排序的參考,將大於該基準數的數字放在後面,小於基準數的數字放在前面。

然後,這樣一來,一串數字分成了兩部分,左部分都比基準數小,右部分都比基準數大。接著,同樣的方法,再分別從左右部分都挑出乙個基準數,同樣作為排序的參考,同樣將大於該基準數的數字放在後面,小於基準數的數字放在前面。

以此類推,直至大小排序完成為止。

為了方便,我們將第乙個數字22作為基準數。

假設一「探針」從右往前遍歷找到乙個比22小的數,然後另一「探針」從左往右遍歷找到乙個比22大的數,交換它們位置。直到兩「探針」相遇,此時左邊的都比22小,右邊的都比22大。

然後將分割好數字串的按以上方法排序

a:右探針從右往左勘測,找到比22小的數,那麼探針停在7位置上;

b:左探針從左往右勘測,找到比22大的數,那麼探針停在43位置上;

c:交換7和43;

如下圖:

繼續a步驟:右探針找到比22小的數,探針停在了2位置上;

繼續b步驟:左探針找到比22大的數,探針停在了23位置上;

繼續c步驟:交換2和23

如下圖:

繼續a步驟:右探針找到比22小的數,探針停在了6位置上;

繼續b步驟:左探針右移與右探針重合,發現6比22小,那麼交換6和22

如下圖:

最終,整串數字被22分割成兩部分,左邊全部比22小,右邊全部比22大。

然後,以此類推,按照上述方法,將左右部分分別排序,如下左半部分排序:

同理,可得出右半部分排序。

public static void main(string args) ;

int start = 0;

int end = array.length - 1;

quicksort(array, start, end);

for (int i = 0; i < array.length; i++)

}public static void quicksort(int a, int left, int right)

// 從前往後比較,如果沒有比關鍵值大的,比較下乙個,直到有比關鍵值大的交換位置

while (end > start && a[start] <= key)

start++;

if (a[start] >= key)

// 左右探針重合後,以基準值分為左右兩部分,左邊都比基準值小,右邊都比基準值大

}// 然後遞迴,直到排完所有數字

if (start > left) quicksort(a, left, start - 1);

if (end < right) quicksort(a, end + 1, right);

}

快速排序(quicksort)是對氣泡排序的一種改進。

那麼以下是十萬個隨機數通過兩種排序方式用時的對比:

public static void main(string args) 

int b = a;

long l = system.currenttimemillis();

int start = 0;

int end = a.length - 1;

quicksort(a, start, end);

system.out.println("100000個隨機數快速排序用時 = " + (system.currenttimemillis() - l));

long s = system.currenttimemillis();

// 氣泡排序

buboosort(b);

system.out.println("100000個隨機數氣泡排序用時 = " + (system.currenttimemillis() - s));

}public static void quicksort(int a, int left, int right)

// 從前往後比較,如果沒有比關鍵值大的,比較下乙個,直到有比關鍵值大的交換位置

while (end > start && a[start] <= key)

start++;

if (a[start] >= key)

// 左右探針重合後,以基準值分為左右兩部分,左邊都比基準值小,右邊都比基準值大

}// 然後遞迴,直到排完所有數字

if (start > left) quicksort(a, left, start - 1);

if (end < right) quicksort(a, end + 1, right);

}private static void buboosort(int arr) }}

}

100000個隨機數快速排序用時 = 58

100000個隨機數氣泡排序用時 = 2884

在10萬條資料時,所用時間長短顯而易見,那麼在大資料情況下,這種對比將更加明顯。所以可以得出:快速排序是對氣泡排序的優化和改進。

Java排序演算法 快速排序

一.思想 對氣泡排序演算法的一種改進。通過一趟排序將排序的資料分割成兩個部分,其中一部分的所有資料都比另一部分的所有資料都要小,然後再按此方法對這兩部分分別再進行快速排序,依次類推。實現為 開始時先設兩個變數i start,j end 以第乙個元素作為中間點,pivot num i 以j 的形式從後...

java排序演算法 快速排序

陣列 2,6,3,6,5,9,1 輸出 1 2 3 5 6 6 9 private static void paixu int arrs,int h,int e while arrs x arrs e 交換值 int m m arrs h arrs h arrs e arrs e m 2,6,3,6...

java快速排序演算法

package com.head.swift 快速排序 public class main sorts a,0,a.length 1 對陣列a進行公升序排列 輸出陣列 for int i a public static void sorts int a int left int right if i...