方法一:不進行任何斷鏈插入操作,找到目標節點之後,只是交換data值,這個思路很簡單,與簡單選擇排序的思路一摸一樣。
程式設計注意事項:
min不能標記最小值,應該要標記最小值對應的鍊錶節點
但是,再一次審題:在基於單鏈表表示的待排序關鍵字序列上進行簡單選擇排序,題目想要我們有斷鏈插入操作,而不是直接修改data值,因此,還需要思考另一種方法。
方法二:
思路:每一趟找到未排序序列中的最大值,然後把最大值用頭插法插入入新的單鏈表的首部,既然有插入和刪除節點的操作,所以必然需要有指標來標記前驅節點,我們引入兩個前驅:pre代表遍歷的時候的前驅,pre_max代表目標最大值的前驅。
程式設計注意事項:
1.在儲存了單鏈表的第乙個節點之後,馬上把頭結點斷開,為新的單鏈表做準備,很多關於單鏈表的題目都有這個步驟:斷開頭結點!!否則指標絕對會出錯。
2.只有在未排序序列的首部節點已經是最大值節點的時候才需要移動外迴圈的標記指標,具體可以看下圖的實現過程。
}//將max插入到頭結點之後,並保持單鏈表鏈結
基於單鏈表實現的桶排序
1.問題描述 使用桶排序演算法對控制台輸入的數字進行排序 2.桶排序涉及到幾個問題 1.桶的大小,這裡我們可以根據輸入的元素的個數來確定桶的大小 2.怎麼確定當前元素進入哪乙個桶,這裡我們使用到的是通過乙個雜湊函式來進行計算 element為當前元素的值,length為桶的大小,max為陣列中最大元...
排序之基於單鏈表插入排序
插入排序的具體方法在上文已經介紹過,此文不再贅述。對於陣列,可以使用索引來輕易操作上下元素,但是單鏈表則只能通過指向下一節點的元素來操作。因此,需要兩個指標firstoutoforder 指向第乙個無序元素的節點 和lastinorder 指向最後乙個有序元素的節點 首先,比較firstoutofo...
基於單鏈表的基數排序,結構應該算挺簡單的,容易懂
下面是 乙個收集和乙個分配 問題在於收集和分配的集合無法再次利用,望大佬疏通一下脈絡,太晚就先睡了,明天在想 include include include typedef struct lnod lnod 分配方法 void distrusort lnod p,lnod f 10 lnod e 1...