排序算法主要包括有插入排序、希爾排序、冒泡排序、快速排序、選擇排序、堆排序、歸并排序、基數(shù)排序。
穩(wěn)定排序
穩(wěn)定排序包括插入排序、冒泡排序、歸并排序、基數(shù)排序
穩(wěn)定性分析
插入排序:在一個(gè)有序的序列中插入一個(gè)數(shù),使插入后的序列保持有序。因?yàn)椴迦氲倪^程中都是從后向前進(jìn)行查找,遇到小于等于(或大于等于)的數(shù)停止尋找,進(jìn)行插入操作。不改變排序前后相等數(shù)值的相對(duì)順序,故使穩(wěn)定的排序算法。
冒泡排序:冒泡故名思義,數(shù)值小的向上飄,數(shù)值大的向下沉,向上飄的數(shù)遇到的小于等于當(dāng)前數(shù)的值停止,向下沉的數(shù)遇到大于等于當(dāng)前數(shù)的數(shù)停止,類似于對(duì)于向上飄的數(shù)有個(gè)排序之前在其前面數(shù)值相等限制了其向上飄的腳步,原先在俺之下,排序后也在俺之下,向下沉也是同理。故也是穩(wěn)定的排序算法。
歸并排序:將一段序列分為若干個(gè)小序列進(jìn)行排序,排序后的小序列進(jìn)行合并得到最后的排序結(jié)果。主要運(yùn)用了分治的思想。分成的前后若干個(gè)小序列在最后進(jìn)行合并時(shí)本身就包含了前后位置信息,在合并時(shí)不改變相同值在排序前后的相對(duì)順序,故歸并排序也是穩(wěn)定排序。
基數(shù)排序:按從低到高的相應(yīng)位的值進(jìn)行排序,也是穩(wěn)定排序算法。
不穩(wěn)定排序算法
非穩(wěn)定排序算法包括:選擇排序、快速排序、希爾排序、堆排序
對(duì)于這種非穩(wěn)定排序,我習(xí)慣是記住一個(gè)例子就好
選擇排序:
[1,2,4,2,5,3 ]?
主要思想是分別找出當(dāng)前遍歷元素中的最小值與相應(yīng)位置的數(shù)進(jìn)行交換,第一遍尋找元素的從第一個(gè)元素起的最小值(或最大值)和第一個(gè)元素進(jìn)行交換,第二趟尋找從第二個(gè)元素起最小的(或最大的)元素與第二個(gè)元素進(jìn)行交換,以此類推。
[3,3',2]? ? 排序后? [2,3',3]
快速排序
[5,3,3,4,3',8,7]? 排序后[3',3,3,4,5,8,7]
希爾排序
一次插入排序是穩(wěn)定的,多次插入排序不是穩(wěn)定的。
堆排序
不是穩(wěn)定排序算法,下次補(bǔ)充。