躲不掉的“排序演算法”,排序演算法
排序演算法,以前米老師講VB的時候就講過排序,隨機顯示10個數,並顯示最大的數。利用冒泡、希爾等等排序演算法都講過,這次資料機構導論再次遇到,軟考再次遇到,應該算是比較容易的一項吧。
學習完資料結構導論,又進一步瞭解到了排序演算法。我們都知道,排序是資料處理的一種運算,因為資料處理花費的時間很多,人麼為了提高電腦的運行效率而提出了各種各樣的排序演算法。
用米老師的話說就是“兩兩比較交換”。
比較兩個關鍵字的大小,將記錄從一個位置移動到另一個位置。
排序的穩定性:
判斷穩定性,通過相同鍵值的兩個記錄在排序前後相對位置變化情況進行判斷。
例如:已知一組資料:1、3、2、5、6、2
通過排序得到1、2、2、3、5、6 排序前帶底線的2在不帶底線的2後面,排完序仍然在它後面就是穩定的,否則就是不穩定的。
1、插入排序
直接插入排序:依次將每個記錄插入到一個已排好序的有序表中,得到一個新的、記錄儀數增加1的有序表。
個人理解:通過和與前面排好的有序表資料進行比較,然後放到合適的位置去,直至排完。直接插入排序是相對於記錄數較少的一種排序。
2、交換排序(兩兩比較,如果兩個鍵值的大小出現逆序,則交換。)
冒泡排序:將第一個記錄的鍵值和第二個記錄的鍵值進行比較,若為逆序,則交換;然後繼續比較第二個和第三個,第n-1個和第n個。
個人理解:後一個數與前一個數進行比較,看是否需要交換。
快速排序:n個記錄中取一個記錄的鍵值為標準,通過一趟排序將待排序的記錄分為小於、等於、大於這個鍵值的獨立部分,再繼續進行快速排序。
第一趟排序比較難(對外於我來說),這個會了後面也就簡單了。一趟排序的步驟:將兩個指標i,j分別指向初始位置和最後的位置,然後反覆操作一下兩步:
(1)、j逐漸減小,並逐次比較j指向的元素和目標元素的大小,若p(j)<T則交換位置。
(2)、i逐漸增大,並逐次比較I指向的元素和目標元素的大小,若p(i)>T則交換位置。
3、選擇排序
直接選擇排序:在i此選擇操作中,通過n-i次的鍵值比較,從n-i+1中選出鍵值最小的記錄,和第i(1<=i<=n-1)個記錄交換。
個人理解:找出最小的那個數與前面的數進行交換,前面排好的就不能動了。
堆排序:
首先要知道堆排序是一種樹形選擇排序.將一個初始序列建成一個堆就是一個反覆篩選的過程.
個人理解:自上而下進行調整,重建堆的過程。
4、歸併排序
將兩個或兩個以上的有序表合并成一個新的有序表。
二路歸併排序
是將兩個有序表合并成一個有序表的排序方法。
個人理解:1、每相鄰的兩個記錄合并,兩兩比較、排序
2、再兩個合并再比較進行排序。
總結:一句話“兩兩比較交換!”
以上學習方法是非常不好的,雖然是理解了每一種排序,但是沒有進行比較,沒有編製知識網,每種排序都有可能有相似之處,也有差別之處,用的過程可能會混淆。
學習方法: 結合以前老師講過的,把它當做舊知識來重溫,簡單化,其實就是舊知識。
遇到的問題:
因為自己沒有去相互比較每種排序,而每種排序又有一些相似之處,所有會混淆。
插入排序VS冒泡排序:插入排序是從第二個鍵值開始,與前面的數進行比較,放到合適的位置;
冒泡排序是1和2的鍵值比較,2和3的鍵值比較。。。。。。n和n-1的鍵值比較,出現逆序則交換。
冒泡排序VS直接選擇排序:
冒泡排序是一個又三角,直接選擇排序是一個左三角。
冒泡排序整個排序過程至多進行n-1趟起泡,直接選擇排序進行n-1次比較,每趟找出最小(最大)的那個鍵值與前面的進行交換。
這樣自己容易混的就不會記混了。個人理解可能存在問題,望大家指出,謝謝。
形容那種躲都躲不掉 像幽靈樣 是哪個成語呐
陰魂不散
一首歌,歌詞有句是躲不掉忘不了好像還有一句是昔日你對我的好女生唱的,節奏一般快
你說的是不是“到不了”