首頁  >  文章  >  Java  >  分享一下Java幾種排序演算法的思路和實例程式碼

分享一下Java幾種排序演算法的思路和實例程式碼

伊谢尔伦
伊谢尔伦原創
2017-04-29 13:39:021198瀏覽

冒泡排序

基本思想:在要排序的一組數中,對當前還未排好序的範圍內的全部數,自上而下對相鄰的兩個數依次進行比較和調整,讓較大的數量往下沉,較小的往上冒。
 即:每當兩個相鄰的數比較後發現它們的排序與排序要求相反時,就將它們互換。
 第一次比較排序的結果:會把其中最大的資料排到最大的索引處
 第二次比較排序後的結果:因為第一次已經把最大的一個資料放到了最大的索引的地方,所以這次要進行比較的資料比數組裡面的元素的資料個數-1個,而第二大的資料也會排到第二大的索引處
    第三次比較排序的結果:跟第二次差不多,只是這次要進行比較的數據比數組裡面的元素的數據個數還少了2個,
    第四次:少3個...
  綜上所述,要使數組裡面的資料依照從小到大排序,總的比較的次數會比數組的長度-1次,而隨著比較的次數的增加,每次要進行比較的數據依次減少。

public class Demo4 {  
  
    public static void main(String[] args) {  
    int number[]={49,38,65,97,76,13,27,14,10};  
    for(int i=0;i<number.length-1;i++){  
        for(int j=0;j<number.length-1-i;j++){  
        if(number[j]>number[j+1]){  
            int tmp=number[j];  
            number[j]=number[j+1];  
            number[j+1]=tmp;  
        }  
        }  
        for (int j = 0; j < number.length; j++) {  
        System.out.print(number[j]+"\t");  
          
        }  
        System.out.println("排序"+(i+1)+"次后的结果");  
          
    }  
  
    }  
  
}

選擇排序

基本方法:
從0索引開始,依序和後面元素比較,小的往前放,第一次完畢,最小值出現在了最小索引處,第二次找到第二小的值。
具體是如何實現呢?
首先第一輪是0索引上的數據依序跟後面各個索引上的數據進行比較,直到遇到一個比它小的數據,這時候,這個小的數據就替換掉0索引上原來的數據,接著這個被替換掉的資料繼續跟它原來的索引位置的後面的索引上的資料進行比較也就是說,進行完第一輪後,0索引上的資料肯定是這個數組上最小的資料
第二輪接著是1索引上的數據來跟後面的數據進行比較,這個時候參與比較的數據比原來少了一個
第三輪又會少一個,這樣循環一輪j的值就會+ 1,也就是j開始的索引下標+1。

public class Demo5 {  
  
    public static void main(String[] args) {  
    int number[]={49,38,65,97,76,13,27,14,10};  
    for(int i=0;i<number.length;i++){  
        for(int j=i+1;j<number.length;j++){  
        if(number[i]>number[j]){  
            int tmp=number[i];  
            number[i]=number[j];  
            number[j]=tmp;  
        }  
        }  
        for (int j = 0; j < number.length; j++) {  
        System.out.print(number[j]+"\t");  
        }  
        System.out.println("第"+(i+1)+"次排序后的结果");  
          
    }  
      
  
    }  
  
}

插入排序

插入排序就是把目前待排序的元素插入到一個已經排好序的清單裡面。 一個非常形象化的例子就是右手抓一張撲克牌,並把它插入左手拿著的排好序的撲克裡面。
 插入排序的最壞運行時間是O(n2), 所以不是最優的排序演算法。
 如果輸入陣列已經是排好序的話,插入排序出現最佳情況,其運行時間是輸入規模的一個線性函數。
 如果輸入陣列是逆序排列的,將會出現最壞情況。平均情況與最壞情況一樣,其時間代價是Θ(n2)。

public class Demo6 {  
  
    public static void main(String[] args) {   
        //定义一个整型数组   
        int[] nums = new int[]{4,3,-1,9,2,1,8,0,6};   
        //打印没有进行排序的数组   
        System.out.println("没有排序之前的结果:" + Arrays.toString(nums));   
        for(int index=0; index<nums.length; index++) {   
          //获得需要插入的数值   
          int key = nums[index];   
          //取得下标值   
          int position = index;   
          //循环比较之前排序好的数据,找到合适的地方插入   
          while(position >0 && nums[position-1] > key) {   
            nums[position] = nums[position-1];   
            position--;   
          }   
          nums[position] = key;   
        }   
        //打印排序后的结果   
        System.out.println("排序后的结果:" + Arrays.toString(nums));   
      }   
  
}

以上是分享一下Java幾種排序演算法的思路和實例程式碼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn