【228期】面试高频:Java常用的八大排序算法一网打尽!

【228期】面试高频:Java常用的八大排序算法一网打尽!

来源:jianshu.com/p/5e171281a387

1.直接插入排序

经常碰到这样一类排序问题:把新的数据插入到已经排好的数据列中。

  • 将第一个数和第二个数排序,然后构成一个有序序列

  • 将第三个数插入进去,构成一个新的有序序列。

  • 对第四个数、第五个数……直到最后一个数,重复第二步。

【228期】面试高频:Java常用的八大排序算法一网打尽!

如何写成代码:

  • 首先设定插入次数,即循环次数,for(int i=1;i<length;i++),1个数的那次不用插入。

  • 设定插入数和得到已经排好序列的最后一个数的位数。insertNum和j=i-1。

  • 从最后一个数开始向前循环,如果插入数小于当前数,就将当前数向后移动一位。

  • 将当前数放置到空着的位置,即j+1。

代码实现如下:

public void sort(int[] array) {  
        //首先确定排序的趟数;       
        int max = array[0];  
        for (int i = 1; i < array.length; i++) {  
            if (array[i] > max) {  
                max = array[i];  
            }  
        }  
        int time = 0;  
        //判断位数;       
        while (max > 0) {  
            max /= 10;  
            time++;  
        }  
        //建立10个队列;       
        List<ArrayList> queue = new ArrayList<ArrayList>();  
        for (int i = 0; i < 10; i++) {  
            ArrayList<Integer> queue1 = new ArrayList<Integer>();  
            queue.add(queue1);  
        }  
        //进行time次分配和收集;       
        for (int i = 0; i < time; i++) {  
            //分配数组元素;       
            for (int j = 0; j < array.length; j++) {  
                //得到数字的第time+1位数;     
                int x = array[j] % (int) Math.pow(10, i + 1) / (int) Math.pow(10, i);  
                ArrayList<Integer> queue2 = queue.get(x);  
                queue2.add(array[j]);  
                queue.set(x, queue2);  
            }  
            int count = 0;//元素计数器;       
            //收集队列元素;       
            for (int k = 0; k < 10; k++) {  
                while (queue.get(k).size() > 0) {  
                    ArrayList<Integer> queue3 = queue.get(k);  
                    array[count] = queue3.get(0);  
                    queue3.remove(0);  
                    count++;  
                }  
            }  
        }  
    }

更多参考:基数排序

END

十期推荐

【211期】面试官:说说为什么HTTPS是安全的

【212期】面试官:说说什么是单点登录?什么是SSO?什么是CAS?

【213期】如何保障消息中间件100%消息投递成功?如何保证消息幂等性?

【214期】面试官:聊聊常见的加密算法、原理、优缺点、用途

【215期】MySQL中事务和锁的重点和难点,一次性讲清楚!

【216期】JVM超神之路

【217期】面试官:你能说一下Redis的常见应用场景吗?

【218期】面试官:你能简单介绍一下 RabbitMQ 及它的使用场景吗

【219期】面试官:谈谈MySQL的limit用法、逻辑分页和物理分页

【220期】面试官:你能说说分布式锁,进程锁,线程锁吗?


与其在网上拼命找题? 不如马上关注我们~

【228期】面试高频:Java常用的八大排序算法一网打尽!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/7881.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!