2.2 先進排序
2.3 基數排序
三、c++呼叫stl排序演算法
四、參考文章:
假設兩個值(a1,簡單排序包括三個:選擇、插入、冒泡,共同點是他們都是穩定的,平均和最壞都是o(na2a_1, a_2
a1,a2
)相同,如果經過某一排序演算法排序後兩值的前後順序不會發生改變,則稱之為穩定排序,否則,為不穩定排序。
2)o(n^2)
o(n2
),輔助空間都是o(1
)o(1)
o(1)
一趟排序思路:每次在無序序列中找到乙個最小值,讓最小值與無序序列和有序序列的交界處的那個無序值交換。
**:
時間複雜度:最好最壞都是o(nvoid
selectsort
(vector<
int> l)
// 交換值
if(i != k)
}}
2)o(n^2)
o(n2
),穩定排序。
排序思路:後面的值,尋找前面的合適的位置插進去。前面的需要乙個個的挪位置。
初始狀態,0處為「哨兵」,1處為「有序」,之後數值為「無序」。對某個「無序」值l
il_i
li找位置排序,如果li−1
l_ili−1
說明需要排序。先把這個值複製到「哨兵」的位置保證不會丟失,然後for迴圈的乙個個向後移動。最後把「哨兵」插入到適當的位置。
**:
特性:穩定、兩個for迴圈:最壞情況原序列逆序,o(nvoid
insertsort
(vector<
int>
& l)
l[j +1]
= l[0]
;}}}
2)o(n^2)
o(n2
);最好情況原序列有序,n-1次。空間複雜度為o(1
)o(1)
o(1)
,因為需要挪動太多位置,所以不適合對大量資料進行排序。
一趟排序思路:兩兩比較大小,大數在上則交換位置。
**:
特性:穩定、兩個for迴圈:最壞情況原序列逆序,o(nvoid
bubblesort
(vector<
int>
& a)}}
}
2)o(n^2)
o(n2
);最好情況原序列有序,n-1次。空間複雜度為o(1
)o(1)
o(1)
共性:最好和平均都是o(n
logn
)o(nlogn)
o(nlog
n)一堂排序思路:找個值,讓左邊的都小於它,右邊的都大於它。
**:
快排最壞時會退化為o(n// 對記錄子串行進行一趟排序,並返回樞軸的位置。
intpartition
(vector<
int>
& l,
int low,
int high)
if(low < high) l[low++
]= l[high]
;while
(low < high && l[low]
<= pivotkey)
if(low < high) l[high--
]= l[low];}
l[low]
= l[0]
;return low;
}// 遞迴進行排序
void
qsort
(vector<
int>
&l,int s,
int t)
}void
quicksort
(vector<
int>
& l)
2)o(n^2)
o(n2
),並且不穩定。
排序思想:
一趟排序思路:將兩個位置相鄰的有序記錄子串行歸併為乙個有序記錄序列。
再來看看治階段,我們需要將兩個已經有序的子串行合併成乙個有序序列,比如上圖中的最後一次合併,要將[4,5,7,8]和[1,2,3,6]兩個已經有序的子串行,合併為最終序列[1,2,3,4,5,6,7,8],來看下實現步驟。
**:
思路:對序列的前n~1個記錄不斷地建立「大頂堆」,每次挑選最大值放到記錄的最後,完成排序。// 將r[i...m] r[m+1...n]合併為l;
void
merge
(vector<
int>
& t, vector<
int>
&l,int i,
int m,
int n)
while
(i <= m) l[k++
]= t[i++];
// 將剩餘的t[i...m]複製到l
while
(j <= n) l[k++
]= t[j++];
// 將剩餘的t[j...n]複製到l
}// 對l[s..t]進行歸併排序,排序後的記錄存入lr中
void
msort
(vector<
int>
&l, vector<
int>
&lr,
int s,
int t)
else
}void
mergesort
(vector<
int>
& l)
從小到大排序
從大到小排序
結構體/類排序
資料結構之排序演算法
1.插入排序 直接插入排序 include void insertsort int unsort int length unsort j temp int main void insertsort num,7 int i 0 for i i 7 i return 0 折半插入排序 include v...
資料結構之排序演算法
學過好久的東西,感覺都忘記的差不多了,雖然可能日常寫 的過程之中也可能寫過一些演算法,但是從來都沒有規整,最近忙裡偷閒,寫點關於排序的演算法,當然好多人都寫過一些很不錯的演算法blog,我寫一下,只是方便自己日後檢視,當然也給有需要的朋友一些參考,歡迎指正 排序演算法有 氣泡排序,選擇排序,插入排序...
資料結構之排序演算法
1 直接插入排序 將乙個記錄插入到已經排好序的有序表中,只有當排序結束時每個元素才能進入到正確的位置,複雜度為o n2 優點 演算法簡單 易行,當待排序記錄數量較少時,該演算法非常有效 缺點 資料規模較大時,效率比較低。演算法insertsort r,n insertsort1.插入排序 for j...