排序——選擇排序

來源:互聯網
上載者:User

標籤:style   blog   http   io   使用   ar   strong   for   資料   

選擇排序

上品物語 

知識點:

  • 原理
  • 演算法
  • 特點
  • 複雜度

1.1   原理

首先,找到數組中最小的那個元素,其次,將它和數組的第一個元素交換位置(如果第一個元素就是最小元素,那麼它就和自己交換)。再次,在剩下的元素中找到最小的元素,將它與數組的第二個元素交換位置。如此往複,直到將整個數組排序。這種方法叫做選擇排序,因為它在不斷地選擇剩餘元素之中的最小者。

1.2  

1.3   演算法

public class Selection {

        

         private static boolean less(Comparable v, Comparable w){

                   return v.compareTo(w)<0;

         }

        

         private static void exch(Comparable[] a, int i, int j){

                   Comparable t = a[i];

                   a[i] = a[j];

                   a[j] = t;

         }

        

         public static void sort(Comparable[] a){

             //將a[]按升序排序

                   int N = a.length;

                   for(int i = 0; i < N; i++){

                            int min = i;

                            for(int j = i+1; j < N; j++)

                                     if(less(a[j],a[min]))

                                               min = j;

                            exch(a,i,min);

                   }

         }

}

1.4   特點

已耗用時間和輸入無關。為了找出最小的元素而掃描一遍數組並不能為下一遍掃描提供什麼資訊。這種性質在某些情況下是缺點,因為使用選擇排序的人可能會驚訝地發現,一個已經有序的數組或是主鍵全部相等的數組和一個元素隨機排列的數組所用的排序時間竟然一樣長!我們將會看到,其他演算法會更善於利用輸入的初始狀態。

資料移動是最少的。每次交換都會改變兩個數組元素的值,因此選擇排序用了N次交換——交換次數和數組的大小是線性關係。我們將研究的其他任何演算法都不具備這個特徵(大部分的增長數量級都是線性對數或是平方層級)。

排序——選擇排序

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.