選擇排序

選擇排序

選擇排序,可以說是所有排序中最爲簡單的一種方式,選擇排序的原理就是,把所有數中最小的數挑出來放在第一個位置,然後不再考慮第一個數,剩下的數中再將最小的挑出來放在第一個位置,以此類推,這樣我們便可以將一列數進行排序了,這種算法非常的簡單,我們今天想說的不僅僅是算法的實現,也是整個排序和代碼的藝術性的實現,下面讓我們看一下我們的代碼:

package paixu;

import java.nio.file.Watchable;

public class Example {

 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 (less(a[j], a[min]))
     min = j;
    exch(a, i, min);
   }
  }
 }

 public 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 show(Comparable[] a) {
  for (int i = 0; i < a.length; i++) {
   System.out.println(a[i] + " ");
   System.out.println();
  }
 }

 public static boolean isSorted(Comparable[] a) {

  for (int i = 1; i < a.length; i++)
   if (less(a[i], a[i - 1]))
    return false;
  return true;
 }

 public static void main(String[] args) {
  String[] a = "B,D,C,A,E,G,F, ".split(",");
  sort(a);
  assert isSorted(a);
  show(a);

 }

}
當然根據我們的代碼,可想而知我們的輸出的結果是按照順序排好的A,B,C,D,E,F,G,我們這裏並不是單純的把所有代碼都羅列到主函數裏面,這裏面用到的函數的類的思想非常的明顯,這樣寫的好處是,如果我們想實現其它排序的話只需要非常簡單的修改一點代碼即可。

我們的less函數,返回的值是一個boolean類型的數值,這裏面用到了一個comparable的函數,此方法如果這個字符串是等參數字符串那麼返回值0,如果這個字符串是按字典順序小於字符串參數那麼返回小於0的值,如果此字符串是按字典順序大於字符串參數那麼一個大於0的值

我們的exch函數的目的是爲了判斷的,是用來將兩個數據的值進行交換的。

我們的show函數的目的是,將排序好的數組輸出在屏幕上面。

我們的isSorted是一個判斷,用來判斷我們的排序是否成功的,如果我們的排序成功了,那麼將返回一個true,如果排序失敗了,那麼我們將返回一個false。

我們的sort函數就是我們選擇排序的關鍵所在了,採用兩個for循環來實現,外層的for循環是控制位置的,內層的for循環是用來決定這個數值是不是剩下數值中最小的,如果是最小的,就把它換到一個位置去。

我們的main函數中我們創建了一個string類型的數組,是將一個字符串通過split的方式變成的string類型的數組,然後調用我們的排序的方法,下面我們還涉及到一個重點就是斷言的方法,也就是說,如果我們斷言後面返回的是真的話,那麼我們就執行下面的操作,也就是輸出我們的結果,如果我們發現排序失敗了,那麼我們的斷言將會起作用,這個時候我們會拋出一個異常,也就不會有結果的輸出了。







































發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章