一.演算法思路
總是選擇在未排序的一群數中最小的數來放到已排序的那些數的後面,即把它放到未排序數的最前面,現在它成了已排序的一部分。
注意:已排序的那部分是全域性的排序,就是說,他不會被衝中間插入,是全域性排序,最終排序的前面那一部分,而不是像插入排序那樣,可能與最終排序結果不太一樣。
步驟:先是選出最小的乙個元素與第乙個位置的元素交換,接著,選出第二小的元素與第二個位置的元素交換;
二.偽**
selectionsort(a )
for i=0 to data.length-2 //可以看作是從這些元素中選出乙個元素去放到a[i]這個位置
從data[i],.....data[data.length-1]中選出最小的元素
將它與a[i]交換 //注意是與a[i]交換,第o次迴圈結束後才有1個元素被排好,在第i次迴圈中,有個i元素被排好
註解:i的最後乙個值為n-2,因為如果除了最後乙個元素都正確放置,即被選作最小的數放置,則剩下的最後乙個數a[n-1]是最大的值。
三.**實現
/*** @author garypotter
* @todo
* 類說明
*/public class selectionsort ;
selectionsort(a);
system.out.println("result:"+a[0]+" "+a[1]+" "+a[2]+" "+a[3]+" "+a[4]+" "+a[5]+" "+a[6]+" "+a[7]+" "+a[8]+" "+a[9]); }
public static void selectionsort(object a){
int i,j,least;
for(i=0;i
四.分析
外部迴圈執行n-1次,對於每個介於0和n-2的i,外部迴圈j=(n-1)-i次,共比較n(n-1)/2次,再加上if語句中i和least的n-1次比較,這個次數對於所有情況都是相同的,可以節約的只有交換次數。
最好情況,已經有序,不需要交換。最壞情況,當最大的元素在第乙個位置,而剩下元素都有序(最大元素始終會在未排序的所有元素的最前面,每次選出最小的元素都需要和它進行交換),交換次數等於外部迴圈的迭代次數n-1,即最壞情況需要移動3(n-1)次(每次都需要交換)。
排序演算法總結(八)選擇排序
選擇排序思想是每次從陣列中選出最大後最小的數,放到正確的位置,然後在剩餘的數中再次選擇最大或者最小的數放到正確位置,一直重複知道完成排序。include using namespace std selectsort int arrays,int n void main int i selectsor...
排序演算法總結(2) 選擇排序
思路 選擇陣列中的最左邊的元素,下標為0,同時標記此元素為最小元素。將第二個元素與此元素比較,若小於最小元素,則它取而代之成為最小元素。後邊的元素以同樣的道理進行比較和標記,在完全遍歷以後,將具有最小標記的元素和第0個元素進行交換。第二此遍歷的時候則從第二個位置開始進行比較。如下 public cl...
排序演算法總結 1 選擇排序
選擇排序是最簡單的排序演算法。考慮儲存在陣列a中的n個數 首先找出a中最小的元素並將其與a 0 交換。接著找到a 1 到a n 1 中最小的數並與a 1 交換。對a中前n 1個數採用同樣的操作。for i 0 to a.length 1 j findmin a,i 找到a i,end 中最小元素的索...