選擇排序:
選擇排序演算法的實現思路有點類似插⼊排序,也分已排序區間和未排序區間。但是選擇排序每次會從未排序區間中找到最⼩的元素,將其放到已排序區間的末尾。
**實現:
package data.sort;
public
class
selectionsort
;selectionsort
(arr)
;arrprint
(arr);}
public
static
void
selectionsort
(int
data)
else
}// 此時minindex對應元素是未排序空間中最小的
int temp=data[i]
; data[i]
=data[minindex]
; data[minindex]
=temp;}}
}public
static
void
arrprint
(int
data)
}}
選擇排序演算法分析:空間複雜度、時間複雜度
選擇排序空間複雜度: o(1),是⼀種原地排序演算法。
選擇排序時間複雜度:選擇排序的最好情況時間複雜度、最壞情況和平均情況時間複雜度都o(n^2)。
穩定性:選擇排序是⼀種不穩定的排序演算法。選擇排序每次都要找剩餘未排序元素中的最⼩值,並和前⾯的元素交換位置,這樣破壞了穩定性。
⽐如 5,8,5,2,9 這樣⼀組資料,使⽤選擇排序演算法來排序的話,第⼀次找到最⼩元素 2,與第⼀個5 交換位置,那第⼀個 5 和中間的 5 順序就變了,所以就不穩定了。正是因此,相對於氣泡排序和插⼊排序,選擇排序就稍微遜⾊了。
選擇排序優化
選擇排序是迴圈一次找乙個值,其實我們完全可以每次找2個值,乙個最大和乙個最小,這樣就快了很多,也莫有什麼效能損失。
插⼊排序&選擇排序
在隨機元素集合上,插⼊排序的效能與選擇排序的效能差不多,但是插⼊排序在近乎有序的資料集上的效能要遠⾼於選擇排序,因此插⼊排序會被⽤於更加複雜排序的⼦過程。
排序演算法(三) 選擇排序演算法
選擇排序演算法首先從序列中選擇乙個元素arr i 通常是第乙個 作為當前最小值,然後把arr i 依次與序列中arr i 之後的元素作比較,如果有元素小於arr i 的,就讓它跟arr i 交換。然後再選擇arr i 1 作為下一輪比較的最小值,然後繼續比較.選擇排序演算法原理很簡單,就是每次把未排...
排序演算法(三) 選擇排序
選擇排序 selection sort 是一種簡單直觀的排序演算法。它的工作原理是每一次從待排序的資料元素中選出最小 或最大 的乙個元素,存放在序列的起始 末尾 位置,直到全部待排序的資料元素排完。選擇排序是不穩定的排序方法 比如序列 5,5,3 第一次就將第乙個 5 與 3 交換,導致第乙個5挪動...
排序演算法(三)選擇排序
基本思想 每一趟在後面n i 1個待排序的元素中找到最小的然後放置在第i個位置,就是位置0 length 1下標相當於是已經知道順序的了,然後在序列裡找每組序列的最小元素放在這個已知位置就可以了。基本思想 每一趟排序記錄當前元素的最終位置,設定乙個變數,每當要交換的時候,隨時更改變數的值 inclu...