和歸併排序一樣,快速排序也是一種分治的遞迴演算法。
快速排序的思想是:選取乙個樞紐元,將比樞紐元小的元素放樞紐元前面,把比樞紐元小的元素放後面,然後將前面的集合,後面的集合,重複之前的步驟。
樞紐元的選取是一門學問,我們要將樞紐元的盡量選取為集合中間值,使得樞紐元兩邊的元素量能更加均勻,避免大小不等的遞迴呼叫。我們將第乙個元素,中值元素,最後乙個元素作比較,取大小在三者中間的元素作為樞紐元。
在下面的**中,我們對快速排序進行了優化,首先是樞紐元的選取,其次,對於小陣列(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 乙個空...