选择排序算法,只需这篇文章就够了
一、說在前面
一直想寫一些簡單易懂的文章,因為平時看的很多的書籍或者文章都是看著很難受的感覺,當然,這并不是說書籍寫的不好,只是說對于一些沒有太多基礎或者基礎不是很好的來說,相對來說還是比較難以理解的。
這個系列主要是寫一些簡單易懂的數據結構與算法的文章,同時也是幫助自己再理解理解這方面的知識。
作為數據結構與算法的開篇,還是以排序算法作為第一部分的內容,需要注意的是,這一系列的文章并不是涉及到很多理論性質的知識,因為前面說了,主要還是希望文章是簡單易懂的,希望能達到讀故事的感覺。如果需要去學習理論性質的知識,可以去查看相關的數據結構與算法的書籍。
二、選擇排序算法
今天早上,老師又叫我們去操場上做早操,做早操之前呢,今天也需要排隊,到操場的同學有5個人,今天的排序方法還是按照身高由低到高排列。
圖片.png但是,今天老師說換一種方法排隊,我來給你們排隊,昨天你們排隊太慢了。
于是,老師說:第一個同學站在原地不要動。
圖片.png然后,我從后面4個同學當中挑一個最矮的同學,這個同學站在第一個同學后面,你們兩個站在原地不要動。
圖片.png圖片.png之后,老師再從后面3個同學里面挑一個最矮的同學,然后讓他站在前面兩個排好的同學后面,這樣這三個同學就排好了,你們站著不要動。
圖片.png圖片.png老師又從最后兩個同學中挑一個最矮的同學,讓他站在前面三個已經排好的隊伍后面,這樣,這四個同學就排好隊列,這四個同學站著不要動。
圖片.png四個同學排好了,只有最后一個同學了,然后,這個同學自己站到前面四個已經排好隊的隊伍的最后,這樣5個同學的位置就排好了。
圖片.png圖片.png老師看到排好了隊,非常開心,對同學們說:“我排隊是不是比你們自己排隊快啊!”
然后,這位程序員老師說,哪位同學懂了剛剛我給你們排隊的思想,能不能敘述一下,這時候,小明說:我會!,于是,小明說了一下思想:
初始時在隊伍中找到最小(大)元素,放到隊伍的起始位置作為已排好隊伍;然后,再從剩余未排序隊伍中繼續尋找最小(大)元素,放到已排序隊伍的末尾。以此類推,直到所有元素均排序完畢。
老師說,隊列都給你們排好了,小明同學也又很好的闡述了思想,你們把代碼實現以下吧(哈哈哈!)。
于是,小海同學就去按照老師的排隊方法,實現了選擇排序算法
public?static?void?selectionSort(int[]?arr)?{if?(arr?==?null?||?arr.length?<?2)?{return;}for?(int?i?=?0;?i?<?arr.length?-?1;?i++)?{int?minIndex?=?i;for?(int?j?=?i?+?1;?j?<?arr.length;?j++)?{//在待排序區選擇最小的元素minIndex?=?arr[j]?<?arr[minIndex]???j?:?minIndex;}swap(arr,?i,?minIndex);//?放到已排序序列的末尾,該操作很有可能把穩定性打亂,所以選擇排序是不穩定的排序算法}}public?static?void?swap(int[]?arr,?int?i,?int?j)?{int?tmp?=?arr[i];arr[i]?=?arr[j];arr[j]?=?tmp;}性能分析
最差時間復雜度:O(n^2)
最優時間復雜度:O(n^2)
平均時間復雜度: O(n^2)
所需輔助空間:O(1)
穩定性:不穩定
置頂或星標公眾號,第一時間接收小海熱文
方法如下
總結
以上是生活随笔為你收集整理的选择排序算法,只需这篇文章就够了的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 今天聊点别的
- 下一篇: shiro整合ehcache