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    
  • 相关阅读:
    Openstack的项目管理方案
    Openstack的web管理端相关
    Openstack安全规则说明
    Openstack命令行删除虚拟机硬件模板flavor
    [转]java中的Static class
    [转]Activitys, Threads, & Memory Leaks
    [转]How to Leak a Context: Handlers & Inner Classes
    [原]Android打包之Eclipse打多渠道包
    [转]ubuntu下整合eclipse和javah生成jni头文件开发android的native程序
    Nao 类人机器人 相关资料
  • 原文地址:https://www.cnblogs.com/wuxun1997/p/6522534.html
Copyright © 2011-2022 走看看