zoukankan      html  css  js  c++  java
  • LinkedList插入排序实现

      昨天遇到一个集合排序的问题,要求在list中插入后数据有序,首先考虑使用集合自带的排序方法,但需要把list转成数组,排序后再转回list。后来发现使用插入算法是最省事的,因为既然是在插入里排序,那么在插入前就先找好插入点,插入后序列就是有序的,以此类推。代码贴上:

    package com.wulinfeng.io;
    
    import java.util.Collections;
    import java.util.LinkedList;
    import java.util.List;
    
    public class SortList {
        List<Integer> sSorted = new LinkedList<>();
    
        /**
         * 插入算法排序
         * 
         * @param e
         */
        public void add(int e) {
            boolean inserted = false;
            // 非首次插入需要遍历list,找到比插入值大的数所在索引并插入,后面的元素后移
            for (int i = 0; i < sSorted.size(); i++) {
                if (e < sSorted.get(i)) {
                    sSorted.add(i, e);
                    inserted = true;
                    break;
                }
            }
            // 没找到值比自己大的插入点,追加到最后
            if (!inserted) {
                sSorted.add(e);
            }
        }
    
        /**
         * 使用集合排序
         * 
         * @param e
         * @param useCollections
         */
        public void add(int e, boolean useCollections) {
            if (useCollections) {
                // 先插入
                sSorted.add(e);
                // 再排序
                Collections.sort(sSorted);
            }
        }
    
        public static void main(String[] args) {
            SortList slist = new SortList();
            slist.add(99);
            slist.add(3);
            slist.add(6);
            slist.add(128);
    
            System.out.println("插入排序后的list:");
            for (Integer i : slist.sSorted) {
                System.out.printf("%3d	", i);
            }
    
            System.out.println("");
    
            slist.add(123, true);
            slist.add(45, true);
            slist.add(19, true);
            slist.add(318, true);
    
            System.out.println("集合排序后的list:");
            for (Integer i : slist.sSorted) {
                System.out.printf("%3d	", i);
            }
        }
    }

      运行结果:

    插入排序后的list:
      3      6     99    128    
    集合排序后的list:
      3      6     19     45     99    123    128    318    
  • 相关阅读:
    Oracle的 listagg() WITHIN GROUP ()函数使用
    AJAX工作原理与缺点
    牛客网数据库SQL实战(此处只有答案,没有表内容)
    Jsp的四大作用域与九大对象
    eclipse的debug调试技巧
    浏览器与服务器交互
    eclipse图标含义
    不要在构造和析构函数中调用虚函数
    构造,析构 cpp
    2 c++对象被使用前要先被初始化
  • 原文地址:https://www.cnblogs.com/wuxun1997/p/6522534.html
Copyright © 2011-2022 走看看