陣列經典排序演算法(二)選擇排序

2021-10-11 16:34:29 字數 1814 閱讀 9180

**如下:

//選擇排序(找最小值)

private

static

void

fun2()

;for

(int i =

0; i < arr.length-

1; i++)}

int t=arr[i]

; arr[i]

=arr[minindex]

; arr[minindex]

=t;}

//輸出陣列

for(

int i : arr)

}

(找最小值下標)i輪–下標範圍:ilen-1(總輪數)len-1(確定輪數)i=0;i(最小下標預設值)int minindex=i;

(每一輪迴圈比較多少次)j=i+1;j<=len-1;j++

j=i+1給每一輪找到的最小值的乙個保護

(判斷條件:與預設值比較)arr[j]

(最小下標賦值)minindex=j;

(交換**)

int t=arr[i];

arr[i]=arr[minindex];

arr[minindex]=t;

同理,稍加修改,我們將找最小值下標改為找最大值下標

**如下:

//選擇排序(找最大值)

private

static

void

fun3()

;//maxindex 找到最大值的下標位置

//i 相當於定位 起始位在最後乙個 當maxindex找到後,與i交換位置

//最後乙個就是最大的,此時i--,定位到倒數第二個位置,重新尋找maxindex與其交換。

for(

int i = arr.length-

1; i >=

0; i--)}

int t=arr[i]

; arr[i]

=arr[maxindex]

; arr[maxindex]

=t;}

//輸出陣列

for(

int i : arr)

}

而我們僅需要修改以下條件

(確定輪數)i=arr.length-1;i>=0;i–

(每一輪迴圈比較多少次)j=i-1;j>=0;j–

j=i-1給每一輪找到的最大值的乙個保護

(判斷條件:與預設值比較)arr[j]>arr[minindex]

問:int j = i-1;或者int j = i+1;的作用?int j = i;是一樣的效果啊。

答:i 相當於定位 起始位在最後乙個 當maxindex找到後,與i交換位置。同時,因為j=i+1;所以會給最小值乙個保護,下次排序就不會排到他。並且減少第一次自己和自己進行比較,提高效率。

經典演算法(二) 選擇排序

昨天我們學習了經典中的經典,氣泡排序,今天我們來學習另乙個經典演算法 選擇排序。一 演算法描述 掃瞄所有的元素,得到最小 最大 的元素,並將最小 最大 的元素與左邊第乙個元素進行交換。再掃瞄除第乙個位置以外的所有元素,得到最小 最大 元素,與左邊第二個元素進行交換,以此類推。如果還不理解 以下以最小...

經典排序演算法之二 選擇排序

思想 假設給定乙個大小為n的陣列,從中選出最大的值 記錄下標 與下標n i的值進行交換 i 1,n 1 i為迴圈次數 即遍歷一次交換一次,每次遍歷確定乙個最大值。優化思路 使用一種快速查詢最值的方法可降低選擇排序的時間複雜度,例如使用堆這種資料結構,可在o logn 的情況下找到最值 普通 cmp ...

經典排序演算法 選擇排序

對比陣列中前乙個元素跟後乙個元素的大小,如果後面的元素比前面的元素小則用乙個變數k來記住他的位置,接著第二次比較,前面 後乙個元素 現變成了 前乙個元素 繼續跟他的 後乙個元素 進行比較如果後面的元素比他要小則用變數k記住它在陣列中的位置 下標 等到迴圈結束的時候,我們應該找到了最小的那個數的下標了...