常用的排序算法及其适用场景


 一、排序的具体应用

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;

    }
}

  

  

原文地址:https://www.cnblogs.com/aaaazzzz/p/12918899.html