對Java中四種基本排序的總結

 JAVA四種基本排序,包括冒泡法,插入法,選擇法,SHELL排序法.其中選擇法是冒泡法的改進,SHELL排序法是 插入法的改進.所以從根本上來說可以歸納爲兩種不同的排序方法:即:插入法&冒泡法 

 

 

一 插入法:

 

遍歷排序集合,每到一個元素時,都要將這個元素與所有它之前的元素遍歷比較一遍,讓符合排序順序的元素挨個移動到當前範圍內它最應該出現的位置。交換是相鄰遍歷移動,雙重循環控制實現.這種排序法屬於地頭蛇類型,在我的地牌上我要把所有的東西按一定的順序規整,過來一個,規整一個.

 

處理代碼如下:

 

public static int[] insertSort(int[] data) {

  int temp;

  for (int i = 1; i < data.length; i++) {

   for (int j = i; (j > 0) && (data[j] > data[j - 1]); j--) {

 

    temp = data[j];

    data[j] = data[j - 1];

    data[j - 1] = temp;

   }

  }

  return data;

 }

 

 

二  冒泡法:

 

比較容易,它的內層循環保證遍歷一次後,集合中最小(大)元素出現在它的正確位置,下一次就是次小元素。。。該方法在集合分佈的各種情況下交換移動的次數基本不變,屬於最慢的一種排序。實現也是雙重循環控制。這種排序法屬於過江龍,就是要找到極端,但是過獎龍也有大哥,二哥等,所以他們只能是大哥挑了二哥挑.

 

處理代碼如下:

 

public static int[] maopao(int[] data) {

  int temp;

  for (int i = 0; i < data.length - 1; i++) {

   for (int j = i + 1; j < data.length; j++) {

    if (data[i] < data[j]) {

     temp = data[i];

     data[i] = data[j];

     data[j] = temp;

    }

   }

  }

  return data;

 }

 

 

三  選擇法:

 

該方法只是通過遍歷集合記錄最小(大)元素的位置,一次遍歷完後,再進行交換位置操作,類似冒泡,但在比較過程中,不進行交換操作,只記錄元素位置。一次遍歷只進行一次交換操作。這個對與交換次序比較費時的元素比較適合。這種排序法比冒泡法要城府要深的多,我先記住極端數據,待遍歷數據完了之後,我再處理,不像冒泡法那樣只要比自己極端一點的就要處理,選擇法只處理本身範圍內的最極端數據.

 

public static int[] xuanze(int[] data) {

  int temp;

  for (int i = 0; i < data.length; i++) {

   int lowIndex = i;

   for (int j = data.length - 1; j > i; j--) {

    if (data[j] < data[lowIndex]) {

     lowIndex = j;

    }

   }

   temp = data[i];

   data[i] = data[lowIndex];

   data[lowIndex] = temp;

  }

  return data;

 }

 

 

四 Shell排序:

 

它是對插入排序的一種改進,是考慮將集合元素按照一定的基數劃分成組去排序,讓每一組在局部範圍內先排成基本有序,最後在進行一次所有元素的插入排序。 

 

public static int[] shellSort(int[] data) {

  for (int i = data.length / 2; i > 2; i /= 2) {

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

    insertSort(data, j, i);

   }

  }

  insertSort(data, 0, 1);

  return data;

 }

 

 private static void insertSort(int[] data, int start, int inc) {

  int temp;

  for (int i = start + inc; i < data.length; i += inc) {

   for (int j = i; (j >= inc) && (data[j] < data[j - inc]); j -= inc) {

    temp = data[j];

    data[j] = data[j - inc];

    data[j - inc] = temp;

   }

  }

 } 

 

 

本篇文章來源於:開發學院 http://edu.codepub.com   原文鏈接:http://edu.codepub.com/2011/0523/31826.php

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