常用的排序算法及其適用場景


 

 


 一、排序的具體應用

1、淘寶商品價格排序:商品按價格高低排序后顯示;租房時看價格,從低到高;
2、微博熱搜排行榜:排序后,最高的十個關鍵字,上熱搜
3、QQ好友列表:按照好友名字的排序(涉及字符排序)
4、超星移動圖書館熱書榜:排序后,最高的十本書為熱書

 

https://blog.csdn.net/dingpiao190/article/details/72674199

 

二、選擇排序——取商品的價格

1.升序

public class choose {
    public static void main(String[] args) {
       // double[] arr = {50.60,65.344,42.9,94,12,33,61};
        //float的數后面必須加f

        //選擇排序
        /*
        思路:1.拿第一個元素與后面的比較,把小的放在第一個,進行位置互換
             2.拿第二個元素與后面的比較,把小的放在第二個,進行位置互換
             ......
         */

        //1.升序
        //取商品的價格
        float[] arr2 = {50,61.10f,72.9f,80,77.777f,45.31f};
        //控制排序的次數n
        for (int i = 0; i <arr2.length -1 ; i++) {
            //取第一個數為最小的數的位置
            int min= i;
           //尋找最小的數
            for(int j = i+1 ;j <arr2.length ;j++){
                if (arr2[min] > arr2[j]){
                    //記錄目前能找到的最小值元素的下標
                    min = j;
                }
            }

            //將找到的最小值和i位置所在的值進行交換
            if (i != min){
                float temp = arr2[i];
                arr2[i] = arr2[min];
                arr2[min] = temp;

            }
        }
        //第 i輪排序的結果為
        System.out.print("排序后的結果為:"+ Arrays.toString(arr2));
}
}

2.降序

 //2.降序
        //取商品的價格
        float[] arr2 = {50,61.10f,72.9f,80,77.777f,45.31f};
        //控制排序的次數n
        for (int i = 0; i <arr2.length -1 ; i++) {
            //取第一個數為最小的數的位置
            int min= i;
            //尋找最小的數
            for(int j = i+1 ;j <arr2.length ;j++){
                if (arr2[min] < arr2[j]){
                    //記錄目前能找到的最小值元素的下標
                    min = j;
                }
            }

            //將找到的最小值和i位置所在的值進行交換
            if (i != min){
                float temp = arr2[i];
                arr2[i] = arr2[min];
                arr2[min] = temp;

            }
        }
        //第 i輪排序的結果為
        System.out.print("排序后的結果為:"+ Arrays.toString(arr2));
    }
}

三、冒泡排序——給同學們按身高排座位

public class PaiXu {
    public static void main(String[] args) {
        //冒泡排序——給同學們按身高排座位
        /*
        思路:1.第一個與第二個比,大的放第二個
              2.第二個與第三個比,大的放第三個
         */
        int[] arr = {178, 162,174,166,184,171,175, 177,169};
        //控制循環次數n
        for (int i = 0;i < arr.length;i++){
            //每排序依次,就少一次
            for (int j = 0;j < arr.length -1-i ;j++){
                if (arr[j]> arr[j+1]){
                    int temp = arr[j];
                    arr[j]= arr[j+1];
                    arr[j + 1] = temp;
                }
            }
        }
        System.out.println("排序后:");
        //數組輸出
        System.out.println(Arrays.toString(arr));
    }
}

四、插入排序

1.基本排序方法

public class ChaRu {
    public static void main(String[] args) {
        //插入排序
        /*
        思路:
        1.第一個數字默認已經排序
        2.取第二個數與第一個比較,然后排序
        3.取第三個數與前兩個數比較,然后比較
        ......
         */
        int[] arr = {345,78,98,67,56,77};
        int j;

        //第一層循環:控制比較次數
        for (int i = 1; i < arr.length; i++) {
            int temp = arr[i];
            j = i;
            while (j > 0 && temp < arr[j - 1]) {
                arr[j] = arr[j - 1]; //向后挪動
                j--;
            }
            //存在更小的數,插入
            arr[j] = temp;
        }
        System.out.println(Arrays.toString(arr));
    }

}

2.給中文姓名排序

public class NameSort {
    public static void main(String[] args) {
        String[] a = {"王五", "李四", "張三", "劉六", "白一", "苦二"};
        getSortOfChinese(a);
        /*for (int i = 0; i < a.length; i++) {
            System.out.println(a[i]);
        }*/
        System.out.println(Arrays.toString(a));

    }

    //定義排序函數
    public static String[] getSortOfChinese(String[] a) {
        // Collator 類是用來執行區分語言環境這里使用CHINA
        Comparator cmp = Collator.getInstance(java.util.Locale.CHINA);
        // JDKz自帶對數組進行排序。
        Arrays.sort(a, cmp);
        return a;

    }
}

3.英文名排序

public class NameSort2 {
    public static void main(String[] args) {
        String[] a = {"Andy", "VBay", "Cbby", "Jim", "Tom", "Harry"};
        getSortOfChinese1(a);
        /*for (int i = 0; i < a.length; i++) {
            System.out.println(a[i]);
        }*/
        System.out.println(Arrays.toString(a));

    }

    //定義排序函數
    public static String[] getSortOfChinese1(String[] a) {
        // Collator 類是用來執行區分語言環境這里使用ENGLISH
        Comparator cmp = Collator.getInstance(Locale.ENGLISH);
        // JDKz自帶對數組進行排序。
        Arrays.sort(a, cmp);
        return a;

    }
}

  

 

 

 

  

 


免責聲明!

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



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