排序演算法 交換排序之快速排序

2021-08-07 08:07:53 字數 1376 閱讀 5354

和歸併排序一樣,快速排序也是一種分治的遞迴演算法。

快速排序的思想是:選取乙個樞紐元,將比樞紐元小的元素放樞紐元前面,把比樞紐元小的元素放後面,然後將前面的集合,後面的集合,重複之前的步驟。

樞紐元的選取是一門學問,我們要將樞紐元的盡量選取為集合中間值,使得樞紐元兩邊的元素量能更加均勻,避免大小不等的遞迴呼叫。我們將第乙個元素,中值元素,最後乙個元素作比較,取大小在三者中間的元素作為樞紐元。

在下面的**中,我們對快速排序進行了優化,首先是樞紐元的選取,其次,對於小陣列(n<=20),快速排序不如插入排序。所以我們在元素量小於20時,採用了插入排序。同時避免了當集合為乙個或者兩個元素時,選取樞紐元沒有三個元素的情況,當然也給程式設計增加了方便。

**:

package com.creat.sort;

import org.junit.test;

/** * created by whz on

2017/8/23.

*/public

class quicksort ;

sort(array);

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

system.out.println();

}public static > void sort(t array)

public static > void insertsort(t array,int

left, int

right)else }}

}private static > void sort(t array,int

left, int

right)

while(array[r].compareto(pivot) > 0 )

if(l < r)else

}swap(array, l, right - 1);

sort(array, left, l-1);

sort(array, l+1, right);

}else

}private static > t getpivot(t array,int

left, int

right)

if(array[left].compareto(array[right]) > 0 )

if(array[middle].compareto(array[right]) > 0)

swap(array, middle, right-1);

return array[right-1];

}private static > void swap(t array,int one, int anthor)

}

快速排序的時間複雜度最好和平均為o(nlog2n),最壞為o(n^2)。

交換排序之快速排序

1.基本思想 假設要排序的陣列是array 0 array n 1 首先任意選取乙個資料 通常選用第乙個資料 作為關鍵資料,然後將所有比它的數都放到它前面,所有比它大的數都放到它後面,這個過程稱為一趟快速排序。一趟快速排序的演算法是 1 設定兩個變數i j,排序開始的時候i 0,j n 1 2 以第...

交換排序之快速排序

問題及 檔名稱 main.cpp 作 者 徐群壯 完成日期 2015.12.15 版 本 號 v1.0 問題描述 資料結構例程 交換排序之快速排序 輸入描述 程式輸出 1.以第1個元素作為基準 include define maxsize 20 typedef int keytype 定義關鍵字型別...

交換排序之快速排序

快速排序的基本思路是選取乙個基準數,然後將小於基準數的移到基準數左邊,反之在右邊,稱為一趟快速排序。然後以基準數分為左右兩組,分別快速排序,如此遞迴,完成最終排序。一般基準數選取第乙個資料,接下來重點在於一趟排序中如何移動資料。如資料data data 0 4為基準,將4搬出,則data 0 乙個空...