快速排序(quick sort)

2021-06-06 05:53:55 字數 1180 閱讀 5457

快速排序,通常排序演算法中的最佳選擇,其期望時間複雜度為o(nlogn),最壞情況為o(n^2)。而且快速排序能進行就地排序,不需要像merge sort樣,使用臨時陣列。

演算法簡介

快速排序和歸併排序(merge sort)類似,都是採用分治法(divide and conquer)。與歸併排序不同的是,快速排序不是講資料平分為兩半,而是將資料分為比參參考值小的一組合比參考值大的一組。

標準的快速排序中參考值選取為a[length - 1]。但是這樣效能不穩定。為了能取得最好的平均效率,通常採用隨機法,隨機在資料中取乙個數作為參考值。下面的**就是按這種方式實現的。

演算法:假設當前陣列的長度為(r + 1)。

1,隨機選擇乙個數a[i],swap(a[i],a[r]);

2,定義兩個指標i,j= 0;i表示當前比參考值大的一組資料的開始位置,j表示當前比參考值大的一組資料的結束位置。

3,乙個迴圈,while(j

下面的一張圖是從mit《演算法導論》上截來的,i,j意義略有不同,不過最重要的是理解演算法的思想。

package sorting;

public class data

return result;

} /**

* print the array

* @param arg array

*/public static void printarray(int arg)

system.out.println(temp);

}}

package sorting;

public class quicksort

public void quicksort(int arg,int begin, int end)

j++;

}//switch arg[i] and arg[r].

// in fact, this switch can be done in the above loop

temp = arg[r];

arg[r] = arg[i];

arg[i] = temp;

quicksort(arg,begin, i - 1);

quicksort(arg, i+ 1,end);

} }}

快速排序 QuickSort

快速排序通常用於排序的最佳的使用選擇,其期望執行時間為 o nlgn 能夠進行就地排序。最壞執行時間為 o n 2 演算法描述 分解 divide 陣列 a beg end 被劃分為兩個子陣列 a beg mid 1 和a mid 1 end 使得a beg mid 1 中的資料都小於 a mid ...

快速排序 quicksort

快速排序 quicksort 是分治法的典型例子,它的主要思想是將乙個待排序的陣列以陣列的某乙個元素x為軸,使這個軸的左側元素都比x大,而右側元素都比x小 從大到小排序 然後以這個x在變換後陣列的位置i分為左右兩個子陣列,再分別進行快速排序,直到子陣列中只有乙個元素為止。快速排序演算法如下 void...

快速排序 QuickSort

1,void quicksort int a,int low,int high 這個函式是排序的遞迴部分,mid就是已經確定的基準元素的位置。2,int partition int a,int low,int high 這個函式幹了兩件事 1 挑出來乙個基準元素 這裡選的是最後乙個作為基準 找它的正...