zoukankan      html  css  js  c++  java
  • 一种时间复杂度为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
     
  • 相关阅读:
    VOA 翻译研讨:2009.2.26 教育报道——在美国学习:网络重新阐释学院之旅
    javac Java 编程语言编译器的使用文档
    在Eclipse中集成Ant编程之配置篇
    ANT使用范例
    MySQL实用命令
    [转]java多线程同步
    Perl 教学 列表和数组变量
    MySql常用命令总结
    MySQL 备份和恢复
    log4j配置详解
  • 原文地址:https://www.cnblogs.com/draem0507/p/3784165.html
Copyright © 2011-2022 走看看