排序演算法之選擇排序

2021-07-04 00:16:20 字數 2447 閱讀 6943

1. 介紹

在氣泡排序演算法一篇中,介紹了基本的氣泡排序與幾種改進方法,但無論那幾種方法怎麼改進,都還是基於兩兩交換不斷推進的氣泡排序。

氣泡排序演算法最費時的是什麼?一是相鄰元素兩兩比較,二是不滿足排序規則的元素兩兩交換,當然交換要比比較費時多了。兩兩交換的目的是什麼呢?是找出最值(最大值或最小值)。

但是氣泡排序演算法中找最值的代價是很大的,每次遍歷,可能需要很多次交換才能找到最值,而這些交換都是很浪費時間的。如果能減少交換次數,又能達到找到最值的目的,那較氣泡排序來說就是一種改進。

這時,我們很自然就可能會想到,如果每次遍歷,只選擇最值元素進行交換,這樣一次遍歷,只需進行一次交換即可,從而避免了其它無價值的交換操作,相較氣泡排序可能多次交換來說就是一種改進。選擇排序就是這樣一種演算法。

2. 演算法描述

選擇排序(selection sort)是一種簡單直觀的排序演算法。它的工作原理是每一次從待排序的元素中選出最小(或最大)的乙個元素,存放在該序列的起始位置,這樣一次遍歷,只需一次交換,便可將最值放置到合適位置;重複前述操作直到全部待排序的資料元素排完。

3. 演算法實現

package com.demo;

/** * 選擇排序演算法

* *@author 小明

* */

public

class

selectionsort

}system.out.print("當前第"+(i+1)+"輪最小值:" + array[min]);

if (min != i)

system.out.println(",排序結果為:");

show(array);}}

/*** 顯示陣列中各元素值

* *@param array

* 待顯示的陣列

*/private

static

void

show(int array)

system.out.println();

}/**

* 入口方法,測試

* *@param args

*/public

static

void

main(string args) ; // 待排序陣列

sort(array);

system.out.println("************************");

system.out.println("排序後:");

show(array);}}

執行結果:

當前第1輪最小值:0,排序結果為:

0 5 2 6 9 3 1 4 8 7

當前第2輪最小值:1,排序結果為:

0 1 2 6 9 3 5 4 8 7

當前第3輪最小值:2,排序結果為:

0 1 2 6 9 3 5 4 8 7

當前第4輪最小值:3,排序結果為:

0 1 2 3 9 6 5 4 8 7

當前第5輪最小值:4,排序結果為:

0 1 2 3 4 6 5 9 8 7

當前第6輪最小值:5,排序結果為:

0 1 2 3 4 5 6 9 8 7

當前第7輪最小值:6,排序結果為:

0 1 2 3 4 5 6 9 8 7

當前第8輪最小值:7,排序結果為:

0 1 2 3 4 5 6 7 8 9

當前第9輪最小值:8,排序結果為:

0 1 2 3 4 5 6 7 8 9

*****

*****

*****

*****

****

排序後:

0 1 2 3 4 5 6 7 8 9

4. 結束語從選擇排序的思想或者是上面的**中,我們都不難看出,尋找最小的元素需要乙個迴圈的過程,而排序又是需要乙個迴圈的過程。因此顯而易見,這個演算法的時間複雜度也是o(n^2)的。這就意味值在n比較小的情況下,演算法可以保證一定的速度,當n足夠大時,演算法的效率會降低。隨著n的增大,演算法的時間增長很快,因此使用時需要特別注意。

和插入排序相比,選擇排序是固定位置,找元素;而插入排序則是固定元素找位置,是兩種思維方式。

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

最近在學習排序演算法,就排序演算法中的四大經典排序 氣泡排序 快速排序 選擇排序 插入排序。會出一系列的講解排序演算法的部落格。今天繼快速排序之後整理一下選擇排序。選擇排序,就是從一列未排序的陣列中先選出最小 最大 的數,放在陣列的第一位,第一位原來的數字放在最小的原來的位置,再選出第二小的數,放在...

排序演算法之選擇排序 選擇排序 堆排序

直接選擇排序 如下 下面 是一次迴圈同時挑選出最大和最小數,並將其與左右交換 選擇排序 void selectionsort int a,int len swap a min a left 如果最大數的下標在為left,證明要交換的最大數已經被 換到min小標所表示的位置,只需要將right和min...

排序演算法之選擇排序

選擇排序 在乙個長度為n的無序陣列中,在第一趟遍歷n個資料,找出其中最小的數值與第乙個元素交換,第二趟遍歷剩下的n 1個資料,找出其中最小的數值與第二個元素交換.第n 1趟遍歷剩下的2個資料,找出其中最小的數值與第n 1個元素交換,至此選擇排序完成。平均時間複雜度 o n2 空間複雜度 o 1 用於...