繼前面的氣泡排序,今天重點是快速排序
快速排序是基於分治法
先講一下分治法,分治法官方定義:
首先將原問題分解成若干個子問題,這個子問題只是原問題較小規模的例項。
解決這些子問題,遞迴的求解各個子問題。遞迴的邊界就是問題規模足夠小時,可以直接求解。
那和快速排序有什麼關係呢?
快速排序原理:找乙個樞軸(一般以序列的第乙個元素為樞軸,所謂樞軸其實就是鴨綠江,分割中國和朝鮮的界河,哈哈哈,開個玩笑,明白意思就好了)好了,序列被分成了兩個子串行;樞軸交換到最終位置;
然後再對劃分的兩個子串行,同樣為每個序列找樞軸,第乙個子串行的樞軸又會把序列分成兩個子子串行;第二個子串行的樞軸也會把序列分成兩個子子串行;兩個子子串行的樞軸也被交換到最終位置;
…這樣不斷的劃分,直到子…子串行中只有乙個元素,此時到了遞迴的邊界,排序完成!
演算法如下:
void
partition
(int a,
int low,
int high)
//low,high分別指向序列的第乙個和最後乙個元素下標
a[low]
=a[pivot]
;//樞軸放到最終位置
return low;
//要返回樞軸的位置,因為靠樞軸位置繼續劃分
}void
quicksort
(int a,
int low,
int high)
}
排序 交換類排序
演算法思想 陣列中第乙個元素和第二個元素比較,按照規則進行交換,再讓第二個和第三個進行比較,直到最大或最小的那個數交換到最後,一趟氣泡排序完成。以公升序為例,氣泡排序主要是讓大的下沉,小的上浮,每一趟排序確立乙個當前無序序列中最大的那個數,使之下沉。時間複雜度分析 最壞 整個陣列逆序,最內層迴圈的語...
交換類排序
交換排序 交換排序主要是根據記錄的關鍵字的大小,將記錄交換來進行排序的。交換排序的特點是 將關鍵字值較大的記錄向序列的後部移動,關鍵字較小的記錄向前移動。這裡介紹兩種交換排序方法,它們是氣泡排序和快速排序。氣泡排序 將被排序的記錄陣列r 1.n 垂直排列,每個記錄r i 看作是重量為r i key的...
排序演算法 交換類排序
今天我們討論一下交換類排序。交換排序的演算法思想 通過交換逆序的元素實現交換排序。交換排序主要有兩種 一種是氣泡排序,一種是快速排序。演算法思想 氣泡排序是一種簡單的交換類排序演算法,它是通過交換相鄰兩個資料元素,逐步將排序序列變成有序序列。基本演算法思想描述如下 假設待排序元素有n個,從第乙個元素...