Java三大基礎排序(冒泡排序、選擇排序、插入排序)


一、冒泡排序

比較相鄰的元素。如果第一個比第二個大,就交換他們兩個。

            對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最后一對。在這一點,最后的元素應該會是最大的數。

            針對所有的元素重復以上的步驟,除了最后一個,即需要進行length-1次。

            第一次是對n個數進行n-1次比較,進行到最后第n個的一個是最大的;

            第二次是對n-1個數進行n-2次比較,進行到最后第n-1個的一個是最大的;

            ......

            持續每次對越來越少的元素重復上面的步驟,直到沒有任何一對數字需要比較。

實現代碼如下:

 1  public static void bubbleSort(int[] arr){
 2         for (int i = 0; i < arr.length; i++) {
 3             for (int j = 0; j < arr.length - i - 1; j++) {
 4                 if (arr[j] > arr[j + 1]){//如果比后一個大,就交換
 5                  int temp = arr[j];
 6                  arr[j] = arr[j + 1];
 7                  arr[j + 1] = temp;
 8                 }
 9             }
10         }
11     }

 

 

三、選擇排序

  選擇排序原理即是,遍歷元素找到一個最小(或最大)的元素,把它放在第一個位置,然后再在剩余元素中找到最小(或最大)的元素,把它放在第二個位置,依次下去,完成排序。

實現代碼如下:

 1    public static void selectSort(int[] arr){
 2 
 3         for (int i = 0; i < arr.length; i++) {
 4             int minIndex = i;//用來記錄最小值的索引
 5             for (int j = i; j < arr.length; j++) {
 6                 if (arr[j] < arr[minIndex]) { // minIndex = arr[j] < arr[minIndex] ? j : minIndex;
 7                     minIndex = j;            //用三元運算符可減少代碼量
 8                 }                           //
 9             }
10                 int temp = arr[i];//將最小的值換到第i個位置
11                 arr [i] = arr[minIndex];
12                 arr [minIndex] = temp;
13 
14         }
15     }

 

二、插入排序

 

插入排序與打撲克時整理手上的牌非常類似。摸來的第1張牌無須整理,此后每次從桌上的牌(無序區)中摸最上面的1張並插入左手的牌(有序區)中正確的位置上。為了找到這個正確的位置,須自左向右(或自右向左)將摸來的牌與左手中已有的牌逐一比較。

實現代碼如下:

 1 public static void insertSort(int[] arr){
 2         for (int i = 0; i < arr.length; i++) {
 3             for (int j = i; j > 0 ; j--) {//往前比較
 4                 if (arr[j] < arr[j-1]){
 5                     int temp = arr[j];
 6                     arr[j] = arr[j - 1];
 7                     arr[j - 1] = temp;
 8                 }
 9             }
10         }
11     }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM