zoukankan      html  css  js  c++  java
  • 常用的排序算法及其适用场景


     一、排序的具体应用

    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;
    
        }
    }
    

      

      

  • 相关阅读:
    mysql数据库8大优化方法
    libcurl与ftp构建小文件传输服务
    采用环形缓冲队列构建异步通信系统
    趣解堆排序--老子儿子争王位
    物联网网关设计实战
    一道来自腾讯基础架构部的笔试题
    深入理解Web Server原理----在CC3200 WiFi模块上构建轻量级Web Server
    C++数组实现的循环队列
    数据结构——栈
    (转)如何将本地git仓库上传到GitHub中托管+实践心得
  • 原文地址:https://www.cnblogs.com/aaaazzzz/p/12918899.html
Copyright © 2011-2022 走看看