選擇排序基礎(java實現)


算法實現:

紅寶書版本:

public class Selection
{
public static void sort(Comparable[] a)
{
int N=a.length;
for (int i=0;i<N;i++)
{
int min=i;
for(int j=i+1;j<N;j++)
if (lessa([j],a[min])) min =j;
exch(a,i,min);
}
}
}

 

基於int數組的實現:

public static void selectSort(int[]a)
{
int minIndex=0;
int temp=0;
if((a==null)||(a.length==0))
return;
for(int i=0;i<a.length-1;i++)
{
minIndex
=i;//無序區的最小數據數組下標
for(intj=i+1;j<a.length;j++)
{
//在無序區中找到最小數據並保存其數組下標
if(a[j]<a[minIndex])
{
minIndex
=j;
}
}
if(minIndex!=i)
{
//如果不是無序區的最小值位置不是默認的第一個數據,則交換之。
temp=a[i];
a[i]
=a[minIndex];
a[minIndex]
=temp;
}
}
}

注:除去前者定義的less(Comparable a, Comparable b) 和 exch(Comparable[] a,int a,int b)簡化了代碼之外,還有一個字面上的區別,即外層for循環中的判定條件一個是i<N、另一個是i<N-1;其實i=N-1時,需要被比較的最后一個數必然已經是最大的數了,不需要進行交換;不過只有一次比較操作,兩者沒什么本質區別。

 選擇排序的本質即從第一位開始,遍歷之后的所有剩余元素,找出其中最小的一個放到第一位;接下來再從第二位開始,找出數組中第二小的數,依次類推。

選擇排序有兩個重要特點:

  1. 運行時間和輸入無關

即不論數組的初始狀態的有序程度,選擇排序的比較次數都沒有變化。考慮到比較次數與元素個數的關系是N²/2,所以當一個已經比較有序的數組使用選擇排序會很不划算。

      2.數據的移動操作最少

移動操作次數是一個常量,最多為N,其他的算法都不具備這個特征。

 


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



java實現選擇排序 選擇排序(Java實現) Java實現選擇排序 java實現選擇排序 用Java實現選擇排序 JAVA實現選擇排序 Java實現選擇排序 Java實現選擇排序 選擇排序(JAVA實現) 選擇排序之java實現
 
粤ICP备14056181号  © 2014-2020 ITdaan.com