十大排序演算法 選擇排序

2021-10-02 06:38:54 字數 1527 閱讀 9748

原理:第一次從待排序的資料元素中選出最小(或最大)的乙個元素,存放在序列的起始位置,然後再從剩餘的未排序元素中尋找到最小(大)元素,然後放到已排序的序列的末尾。以此類推,直到全部待排序的資料元素的個數為零。

工具類

public

class

utils

}//用於交換陣列兩個下標的位置

static

void

swap

(int

arrs,

int x,

int y)

}

邏輯**
public

class

selectionsort

;for

(int i =

0; i < arrs.length -

1; i++

)//當最小值下標變化了才進行交換

if(minpos != i)

//列印陣列

utils.

printarr

(arrs);}

}}

1.演示圖:

改進版:只需迴圈n/2次

public

class

selectionsortsuper

;int minpos;

//儲存最小元素的小標

int maxpos;

//儲存最大元素的小標

int len = arrs.length;

//只需要跑n/2趟即可

for(

int i =

0; i < len /

2; i++

)else

if(arrs[j]

> arrs[maxpos])}

//當最小值下標變化時,將最小值與前面的值交換

if(minpos != i)

}//因為最大值都要放到後面,當最大值遍歷後就是最後位置時是不需要變化的,所以要進行重新定位

// 只有當將最大值下標不為最後下標時,最大值與後面的值才進行交換

if(maxpos != len -

1- i)

system.out.

print

("第"

+(i +1)

+"次排序結果:");

utils.

printarr

(arrs)

; system.out.

println()

;}}}

總結

時間複雜度(平均)

時間複雜度(最好)

時間複雜度(最壞)

空間複雜度

穩定性o(n²)

o(n²)

o(n²)

o(1)

不穩定

十大排序演算法之選擇排序

選擇排序也是一種o n 2 時間複雜度的排序演算法,選擇排序是每一次迴圈都將找到最小值,依次將最小值 次小值分別從左至右進行排序。以下是具體實現過程,其中使用的工具類這篇部落格已經給出,import cn.zjut.util.sorttestutil public class selectsort ...

十大排序演算法

1.非線性時間類排序 時間複雜度未突破 0 nlog 2n 不穩定的四個排序演算法 選擇排序 0 n2 希爾排序 0 n1.3 希爾排序實現python 快速排序 0 n log2 n 0 nlog 2n 0 nlog 2 n 快速排序實現c python 堆排序 0 n log2 n 0 nlog...

十大排序演算法

排序規則 從左至右依次增大 一 基於比較的排序演算法 插入排序 逐個遍歷未排序序列,將其在已排序序列中從右到左比較,直到遇到比自己小的數,然後將元素插入到那個數的後面,有序序列從左向右生長。選擇排序 在未排序序列中選擇最小的元素,將其插入到已排序序列的末尾,有序序列從左向右生長。氣泡排序 從左至右逐...