Java中一个巧妙的排序算法

    在数据结构和算法中,有很多的排序、查找算法,但是如果你的数不是很大的话,有一种巧妙的排序算法,可以帮助你快速的进行数据的排序。

       首先,假如我有1000个随机产生的0~2000之间的随机数,我使用HashSet来存放这1000个数,其详细步骤如下:

 

import java.util.*;

 

public class HashSetSort {

   public static void main (String args[]){

      HashSet hs = new HashSet() ;

     

      //产生1000个值不相同的随机数

      while (hs.size() < 1000) {

        hs.add((int)(Math.random()*2000)) ;

      }

     

      long startTime = System.currentTimeMillis() ;   //获取开始排序时的时间

     

      //申明一个数组,使用一个循环,将随机产生的1000个数据排序并且存储到数组中

      int d[] = new int[2000] ; //注意这里的数组大小是2000,因为随机数是0~2000之间的数

     

      for (Integer v : hs) {

        d[v.intValue()] = v.intValue() ;

      }

     

      //将数组中的0值丢弃,申明一个ArrayList,用来存放处理后的剩余数据

      ArrayList al = new ArrayList() ;

     

      for (int i = 0 ; i < 2000 ; i++) {  //注意这里的循环大小是2000d数组的大小的2000

        if (d[i] != 0) {

           al.add(d[i]) ;

        }

      }

     

      //如果随机数中有0值,就需要将这个被丢弃的0值加到ArrayList

      if (al.size() < 1000) {

        al.add(0) ;

      }

     

      //打印出排序1000个数据的时间,相比之下,这会给了我一个惊喜

     System.out.println("排序1000个数据所用的时间:"+(System.currentTimeMillis() - startTime)+"ms") ;

   }

}

 

       可以说这不是一个算法,或许如果被我的数据结构老师看到我这样做排序,她还有骂我一顿,但是它却是在每种情况下比一般的算法要更快,在我的机子上打印出来的时间的25ms,而我使用常用的冒泡排序算法来排序时,这个过程使用了63ms,速度将进提高了三倍,何乐而不为···

       但是这种用法也有缺点,应为我必须知道我要排序的数最大为多大,而且在我申明数组的时候,我的数组大小要与最大的数据的大小一样的大。所以,当我要排序的数据的最大值很大时,就会浪费大量的内存,甚至会因为内存不足而产生异常,不信你就试试!

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/25244847/viewspace-695865/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/25244847/viewspace-695865/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值