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 用於...