對(duì)n和元素的序列進(jìn)行冒泡排序 在快速排序、堆排序、歸并排序中,什么排序是穩(wěn)定的?
在快速排序、堆排序、歸并排序中,什么排序是穩(wěn)定的?冒泡排序,堆排序,快速排序,插入排序,歸并排序的的穩(wěn)定性及時(shí)間空間復(fù)雜度?冒泡排序、插入排序、合并排序和基數(shù)排序都是穩(wěn)定排序??焖倥判颉⑦x擇排序、堆排
在快速排序、堆排序、歸并排序中,什么排序是穩(wěn)定的?
冒泡排序,堆排序,快速排序,插入排序,歸并排序的的穩(wěn)定性及時(shí)間空間復(fù)雜度?
冒泡排序、插入排序、合并排序和基數(shù)排序都是穩(wěn)定排序??焖倥判?、選擇排序、堆排序和希爾排序都是不穩(wěn)定排序。冒泡排序、插入排序和選擇排序的時(shí)間復(fù)雜度為O(n^2),合并排序、堆排序和快速排序的時(shí)間復(fù)雜度為O(n*log(n)),冒泡排序、插入排序和選擇排序的空間復(fù)雜度為O(1),合并排序?yàn)镺(n)。
堆排序,歸并排序,快速排序的比較,到底誰快?
我測(cè)試的平均排序時(shí)間是:數(shù)據(jù)是一個(gè)隨機(jī)整數(shù),時(shí)間單位是秒
數(shù)據(jù)規(guī)??焖倥判蚝喜⑴判蛳柵判蚨雅判騗1000萬0.75 1.22 1.77 3.57
5000萬3.78 6.29 9.48 26.54
100萬7.65 13.06 18.79 61.31
堆排序最差。
這是一個(gè)算法障礙。不可能。因?yàn)槊看稳∽畲笾挡⑴c堆底部的數(shù)據(jù)(表示為x)交換時(shí),都可以重新篩選堆并調(diào)整堆頂部的x。很有可能您仍會(huì)將其調(diào)整到堆的底部(堆底部的x顯然是一個(gè)小數(shù)字,僅在底部),然后將其與堆頂部的最大值交換并再次調(diào)整。
從上面可以看出,堆排序做了很多無用的工作。
在快速排序、堆排序、歸并排序中,什么排序是穩(wěn)定的?
合并排序是一種穩(wěn)定的排序算法。歸并排序的穩(wěn)定性分析:歸并排序是將序列遞歸地劃分為短序列,遞歸的退出是短序列只有一個(gè)或兩個(gè)序列,然后將每個(gè)有序的段序列歸并為一個(gè)有序的長(zhǎng)序列,繼續(xù)歸并直到所有的原序列都是有序的??梢园l(fā)現(xiàn),當(dāng)有一個(gè)或兩個(gè)元素時(shí),一個(gè)元素不會(huì)交換,如果兩個(gè)元素大小相等且沒有外部干擾,穩(wěn)定性不會(huì)被破壞。然后,在合并短序列的過程中,不破壞穩(wěn)定性。如果在合并過程中兩個(gè)當(dāng)前元素相等,則將前一序列中的元素保存在結(jié)果序列的前面,以保證合并的穩(wěn)定性。因此,合并排序也是一種穩(wěn)定的排序算法。擴(kuò)展數(shù)據(jù):算法穩(wěn)定性判斷方法:常用排序算法中,堆排序、快速排序、希爾排序、直接選擇排序?yàn)椴环€(wěn)定排序算法,基數(shù)排序、氣泡排序、直接插入排序、半插入排序、合并排序?yàn)榉€(wěn)定排序算法。對(duì)于不穩(wěn)定排序算法,只需舉例說明其不穩(wěn)定性;對(duì)于穩(wěn)定排序算法,必須對(duì)算法進(jìn)行分析才能得到穩(wěn)定的特征。需要注意的是,排序算法是否穩(wěn)定取決于具體的算法。不穩(wěn)定算法在一定條件下可以成為穩(wěn)定算法,穩(wěn)定算法在一定條件下也可以成為不穩(wěn)定算法。例如,快速排序原本是一種不穩(wěn)定的排序方法,但如果要排序的記錄中只有一組具有相同鍵的記錄,并且選定的軸值只是組中相同鍵的一個(gè),則快速排序是穩(wěn)定的。