JAVA排序演算法之 選擇排序

2021-09-06 10:20:55 字數 2170 閱讀 1028

1. 選擇排序

選擇排序的基本思想是遍歷陣列的過程中,以i代表當前需要排序的序號,則需要在剩餘的[i..n-1]中找出其中的最小值,然後將找到的最小值與i指向的值進行交換。因為每一次確定元素的過程中都會有乙個選擇很大值的子流程,所以稱之為選擇排序。

比如[38, 17, 16, 16, 7, 31, 39, 32, 2, 11]

i = 0:  [2 , 17, 16, 16, 7, 31, 39, 32, 38 , 11] (0th [38]<->8th [2])

i = 1:  [2, 7 , 16, 16, 17 , 31, 39, 32, 38, 11] (1st [38]<->4th [17])

i = 2:  [2, 7, 11 , 16, 17, 31, 39, 32, 38, 16 ] (2nd [11]<->9th [16])

i = 3:  [2, 7, 11, 16, 17, 31, 39, 32, 38, 16] ( 無需交換 )

i = 4:  [2, 7, 11, 16, 16 , 31, 39, 32, 38, 17 ] (4th [17]<->9th [16])

i = 5:  [2, 7, 11, 16, 16, 17 , 39, 32, 38, 31 ] (5th [31]<->9th [17])

i = 6:  [2, 7, 11, 16, 16, 17, 31 , 32, 38, 39 ] (6th [39]<->9th [31])

i = 7:  [2, 7, 11, 16, 16, 17, 31, 32, 38, 39] ( 無需交換 )

i = 8:  [2, 7, 11, 16, 16, 17, 31, 32, 38, 39] ( 無需交換 )

i = 9:  [2, 7, 11, 16, 16, 17, 31, 32, 38, 39] ( 無需交換 )

選擇排序隨著排序的進行(i逐漸增大),比較的次數會越來越少,但是不論陣列初始是否有序,選擇排序都會從i至陣列末尾進行一次選擇比較,所以給定長度的陣列,選擇排序的比較次數是固定的:1+2+3+…+n=n*(n+1)/2,而交換的次數則跟初始陣列的順序有關,如果初始陣列順序為隨機,則在最壞情況下陣列元素將會交換n次,最好的情況是0次。選擇排序的時間複雜度和空間複雜度分別為o(n2 ) 和o(1)。

packagealgorithms;

public

abstract

classsorterextendscomparable> 

protected

final

voidswap(e array,intfrom ,intto)

public

voidsort(string hellostring,intfrom,intlen) }

packagealgorithms;

/***@authoryovn**/

public

classselectsorterextendscomparable>extendssorter

}swap(array,i,smallest); }

} public

static

voidmain(string args);

string mystringarray2 =newstring;

selectsorters1 =newselectsorter();

for(inti=0;i<3;i++)

s1.sort(mystringarray1, 0, 3);

for(inti=0;i<3;i++)}

} output: a

c b

a b

c

java排序演算法之 選擇排序

選擇排序是一種非常簡單的排序演算法,從字面意思我們就可以知道,選擇就是從未排序好的序列中選擇出最小 最大 的元素,然後與第 i 趟排序的第 i 1 陣列中下標從 0 開始 個位置的元素進行交換,第 i 個元素之 前的序列就是已經排序好的序列。整個排序過程只需要遍歷 n 1 趟便可排好,最後乙個元素自...

Java排序演算法之 選擇排序

package algorithm.sort 選擇排序 首先找出陣列中的最小元素,將其與陣列的第乙個元素交換,接著找出次小元素,將其與陣列的第二個元素交換 對陣列中的前n 1個元素執行這一過程 author administrator public class selectsort 交換最小元素與每...

java演算法之選擇排序

public class selectionsort system.out.println 排序前 printarray arr 呼叫輸出方法 selectionsort arr 進行排序 system.out.println 排序後 printarray arr 呼叫輸出方法 選擇排序的實現 pu...