簡單選擇排序

2021-09-30 12:21:08 字數 1289 閱讀 9405

前文介紹的氣泡排序存在 幾種改進方法,然而效率還是很低

原因就是:無論那幾種方法怎麼改進,都還是基於兩兩交換不斷推進的冒泡演算法。從廣義上說,都是屬於冒泡演算法。

那還有沒有其它改進的餘地呢?

冒泡演算法兩兩交換的目的是什麼?-------找出最值。

而通過這種方式取得最值得代價是很大的,因為,每次遍歷,可能需要很多次交換才能找到最值,而這些交換都是很浪費時間的。

如果能減少交換次數,同時又能取得最值,那麼這就是一種改進。

因此問題便轉換為:如何求最值?求最值得方法有幾種?

正所謂條條大路通羅馬all roadslead to rome,做成一件事的方法不只一種,人生的路也不只一條。

因此,除了使用兩兩交換的演算法找出最值外,或許還有其它方式。

如果有的話,就是通過另外的思路求得最值,於是便跳出了冒泡的思維模式。

好了,大家想想有沒有其他的方法遍歷一次就可求出最值?

求最值,需要比較,但不一定非得通過不斷推進的方式。

那如何能更好的求得最值呢?

很自然的一種想法便是:

每次遍歷,只選擇最值元素進行交換,這樣一次遍歷,只需進行一次交換即可,從而避免了其它無價值的交換操作。

如何求得最值元素所在位置呢?

這還得通過遍歷比較。

具體方法為:

遍歷一次,記錄下最值元素所在位置,遍歷結束後,將此最值元素調整到合適的位置

這樣一次遍歷,只需一次交換,便可將最值放置到合適位置

這便是 簡單選擇排序演算法。

**僅供參考

void ******selectionsort(int arr,int length)

}//交換

if(maxindex!=length-i-1)}}

簡單選擇排序 簡單選擇排序詳解

n個記錄的檔案的直接選擇排序可經過n 1趟直接選擇排序得到有序結果 初始狀態 無序區為r 1.n 有序區為空。第1趟排序 在無序區r 1.n 中選出關鍵字最小的記錄r k 將它與無序區的第1個記錄r 1 交換,使r 1.1 和r 2.n 分別變為記錄個數增加1個的新有序區和記錄個數減少1個的新無序區...

選擇排序 簡單選擇排序

在要排序的一組數中,選出最小 或者最大 的乙個數與第1個位置的數交換 然後在剩下的數當中再找最小 或者最大 的與第2個位置的數交換,依次類推,直到第n 1個元素 倒數第二個數 和第n個元素 最後乙個數 比較為止。第一趟,從n個記錄中找出關鍵碼最小的記錄與第乙個記錄交換 第二趟,從第二個記錄開始的n ...

選擇排序 簡單選擇排序

1.選擇排序 簡單選擇排序,堆排序 與交換排序 氣泡排序,快速排序 的區別 每次比較如果發現較小的元素在後面,就交換兩個相鄰的元素。而選擇排序演算法的改進在於 先並不急於調換位置,先從a 1 開始逐個檢查,看哪個數最小就記下該數所在的位置p,等一躺掃瞄完畢,再把a p 和a 1 對調,這時a 1 到...