• 一种时间复杂度为O(n)的排序方法(转载)


    原文地址:http://my.oschina.net/u/158457/blog/28536

    排序的方法很特别,有点类似插入排序的味道

    先看下代码

     1 public class Sort {
     2     private static boolean[] temp = new boolean[10000];
     3 
     4     /**
     5      * @notice 注意参数中的array数组中的每个元素大小不能超过9999,而且不能有重复元素。
     6      *         同时也就意味着array数组大小不能超过10000,其中元素大小在0-9999的这样一个范围。
     7      */
     8     public void sort(int[] array) {
     9         init();
    10         for (int i = 0; i < array.length; i++) {
    11             temp[array[i]] = true;//这个是核心 保证了temp数组中子元素为true的对象是按array[i]中元素的正序进行排序的 
    12         }
    13 
    14         int loc = 0;
    15         for (int j = 0; j < temp.length; j++) {
    16             if (temp[j])
    17                 array[loc++] = j;
    18         }
    19     }
    20 
    21     private void init()// 其实在此方法中通过传一个整数可以剪枝,而整数为array数组中元素的最大值
    22     {
    23         for (int i = 0; i < temp.length; i++)
    24             temp[i] = false;
    25     }
    26 
    27     public void print(int[] array) {
    28         for (int i = 0; i < array.length; i++)
    29             System.out.print(array[i] + "  ");
    30         System.out.println();
    31     }
    32 
    33     public static void main(String[] args) {
    34         Sort sort = new Sort();
    35         int array[] = new int[] { 3, 5, 1, 2, 10, 88, 25, 66 };
    36         sort.print(array);
    37         sort.sort(array);
    38         sort.print(array);
    39     }
    40 }

    核心代码

     temp[array[i]] = true;

    原作者提到了此方法存在的缺陷:1.数组不能重复 2.array数组中的每个元素大小不能超过9999
     
  • 相关阅读:
    Yii2框架bootstrap样式理解
    spring 配置bean的方法及依赖注入发方式
    C#深拷贝
    【麦子学院】Linux cmd命令大全
    JEECG中的validform验证ajaxurl的使用方法
    ORACLE 如何查询被锁定表及如何解锁释放session
    获取请求真实ip
    jsp值传到后台Struts2中的action三种方法
    ajax 二级联动与springmvc 交互
    SpringMVC返回json数据的三种方式
  • 原文地址:https://www.cnblogs.com/draem0507/p/3784165.html
Copyright © 2020-2023  润新知