經典演算法系列之 選擇排序

2022-08-23 16:57:12 字數 1653 閱讀 1939

1、前言

演算法,在計算機中的地位,就相當於人類大腦的決策中樞系統,哪怕最簡單的演算法,其精妙的思維方式,都可以讓人開啟一扇新的視窗。

演算法,它不僅僅只是狹義的用來解決電腦科學領域的問題,更是一種「思維方式」。演算法思維,是一種深度思考和創造的過程。

演算法,只有真正理解了,而不只是所謂的知道,並將應用到生活、工作、學習等各個方面,它將一定使人受益終生。

2、原理推導

選擇排序,就是選擇乙個固定的元素與之後的元素依次比較,把小的元素往前調或者把大的元素往後調,實現元素的順序排列。

給定一組 的原始無序陣列,按照從小到大公升序排列。

#step1

第乙個數字和第

二、三、四、五、六個數字依次比較,得出最小數字1,然後數字 和 位置互換,完成第一輪排序。

#step2

第二個數字和第

三、四、五、六個數字依次比較,得出最小數字5,然後 和 位置互換,完成第二輪排序。

#step3

第三個數字和第

四、五、六個數字依次比較,得出最小數字6,然後 和 位置互換,完成第三輪排序。

#step4

第四個數字和第

五、六個數字依次比較,得出最小數字7,數字 和 位置不需要互換,完成第四輪排序。

#step5

第五個數字和第六個數字依次比較,得出最小數字8,數字 和 位置不需要互換,完成第五輪排序。

至此,選擇排序已經完成結果為: ,我們可以看到step4順序已經排好了,但程式並不知道,所以還會接著繼續比較直到最後。

3、**示例

# 第一種實現,每次比對只要符合條件,馬上交換兩個元素位置

public static void choosesortone(int array)        

}    }}

# 第二種實現,每次比對符合條件,不進行位置交換,只記錄需要交換的索引,到一輪比較結束再交換位置

public static void choosesorttwo(int array)        

}       

//一輪迴圈結束,再將兩個數的索引位置互換,節省交換次數,提高排序效率        }}

# 元素交換方法int temp = array[indexa];   

array[indexa] = array[indexb];   

array[indexb] = temp;

}4、禪定時刻

選擇排序的精妙之處不在於選擇乙個元素依次比較,而在於對他的優化處理,比較而不交換,乙個小的調整,在資料量級不大的時候,難以體現它的優勢,一旦資料量級超過一定的界限,運算效率的速度就相差巨大。

乙個產品創造過程中,我們遇到常規的問題,用常規的解決方案可以應付,如果能養成習慣多乙份思考,在此基礎上持續改進,優化實現方法,日積月累這就形成了個人和企業的護城河,增強個人和企業在社會中的競爭力。

作者簡介

思維的持續,乙個真的有思想,不穿格仔襯衫的程式設計師。

經典排序演算法系列之二 選擇排序

2.1基本思想 第i趟排序開始時,當前有序區和無序區分別為r 0.i 1 和r i.n 1 該趟排序則是從當前無序區中選出關鍵字最小的記錄r k 將它與無序區的第乙個記錄r i 交換,使得r 0.i 和r i 1.n 1 分別變為新的有序區和無序區,經過i 1趟排序後,整個表遞增有序。2.2演算法思...

選擇排序 演算法系列

選擇排序 思想 選擇排序的思想也非常簡單,就是從一堆數中選出最小值,然後和頂部元素互換,之後再用同樣的方法排序剩餘的數,最終得到排序的結果。using system using system.collections.generic using system.linq using system.tex...

排序演算法系列之選擇排序 2

選擇排序原理 在長度為nd 陣列中,找到位置不適合的元素,直接放入最終合適的位置上,也就是依次在未排序陣列中找到最小元素,直到最後乙個元素位置 剩下的最後乙個元素n 2最大,無需操作 每輪從無序陣列中找到的最小資料,依次放入到從data 0 到data n 2 中 優點 賦值次數少 缺點 忽略了資料...