基本排序演算法 選擇排序隨筆

2021-10-01 13:47:32 字數 1866 閱讀 6627

簡介

選擇排序(selection sort)是一種簡單直觀的排序演算法。它的工作原理是:第一次從待排序的資料元素中選出最小(或最大)的乙個元素,存放在序列的起始位置,然後再從剩餘的未排序元素中尋找到最小(大)元素,然後放到已排序的序列的末尾。以此類推,直到全部待排序的資料元素的個數為零。選擇排序是不穩定的排序方法。

時間複雜度

選擇排序時間複雜度為: o(n^2)

選擇排序的交換操作介於 0 和 (n - 1) 次之間。選擇排序的比較操作為 n (n - 1) / 2 次之間。選擇排序的賦值操作介於 0 和 3 (n - 1) 次之間。

比較次數o(n^2),比較次數與關鍵字的初始狀態無關,總的比較次數n=(n-1)+(n-2)+…+1=n*(n-1)/2。交換次數o(n),最好情況是,已經有序,交換0次;最壞情況交換n-1次,逆序交換n/2次。交換次數比氣泡排序少多了,由於交換所需cpu時間比比較所需的cpu時間多,n值較小時,選擇排序比氣泡排序快。

空間複雜度

由於選擇排序不需要額外的空間,所以空間複雜度為: o(1)

穩定性選擇排序是給每個位置選擇當前元素最小的,比如給第乙個位置選擇最小的,在剩餘元素裡面給第二個元素選擇第二小的,依次類推,直到第n-1個元素,第n個元素不用選擇了,因為只剩下它乙個最大的元素了。那麼,在一趟選擇,如果乙個元素比當前元素小,而該小的元素又出現在乙個和當前元素相等的元素後面,那麼交換後穩定性就被破壞了。比較拗口,舉個例子,序列5 8 5 2 9,我們知道第一遍選擇第1個元素5會和2交換,那麼原序列中兩個5的相對前後順序就被破壞了,所以選擇排序是乙個不穩定的排序演算法。

/**

* 選擇排序 最簡單也是最沒用的排序演算法 並且不穩定

* 效率底下 執行耗時長 記憶體消耗低

*/public

class

selectionsort

//選擇排序演算法優化 【每次選出最大值與 最小值】

public

static

int[

]sortseo

(int

arr)

for(

int j = i+

1; j < length - i -

1; j++)if

(minindex == i && maxindex == length - i -1)

else

if(minindex == i && maxindex != length - i -1)

else

if(minindex != i && maxindex == length - i -1)

else

else}}

return arr;

}//基礎選擇排序【每次選出最小值】

public

static

int[

]sortbasics

(int

arr)

swap

(arr, i, minindex);}

system.out.

println

("共進行: "

+maxcount+

"次大迴圈,: "

+mincount+

"次小迴圈");

return arr;

}public

static

void

swap

(int

arr,

int i,

int j)

//列印int陣列

public

static

void

print

(int

arr)

}}

排序演算法 基本選擇排序

選擇排序是一種簡單直觀的排序演算法,基本思想是每一次從待排序的資料元素中選出最小 或最大 的乙個元素,存放在序列的起始位置,直到全部待排序的資料元素排完。n個元素的數列,需要n 1趟直接排序。拿第1個元素,依次與後面的其他元素逐個比較,找出最小 最大 的元素,放到下標為0的位置。經過第1步,數列的第...

基本排序演算法 選擇排序

排序方式 選擇排序 表現最穩定的排序演算法之一 這個穩定不是指演算法層面上的穩定 因為無論什麼資料進去都是o n 的時間複雜度 所以用到它的時候,資料規模越小越好。唯一的好處可能就是不占用額外的記憶體空間了吧。理論上講,選擇排序可能也是平時排序一般人想到的最多的排序方法了吧。原理首先從原始陣列中找到...

選擇排序演算法改進隨筆

選擇排序演算法改進隨筆 這是一道選擇排序改進的小測試,想法,在一次遍歷中直接選取出最大值和最小值,然後分別移動到頭尾,主要難點在於邊界的處理,因為使用了兩次swap,第一次使用swap會造成index變化,第二次使用swap的時候就需要注意。主要是兩種情況 當最大值出現在頭,或者最大值出現在頭,最小...