CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Java >  J2EE / EJB / JMS

寻找算法

楼主liaoliao4481(动感超人)2006-06-03 11:00:19 在 Java / J2EE / EJB / JMS 提问

在数据中有负数有正数找一个算法要求时间最短.只要把负数排在正数前面打印出来就行了 问题点数:20、回复次数:5Top

1 楼Nomad_K(细菜)回复于 2006-06-05 14:47:05 得分 0

冒泡排序Top

2 楼chouy(chouy)回复于 2006-06-05 15:52:33 得分 10

快速交换排序,时间复杂度O(n).  
   
  public   class   QuickSort  
  {  
          public   static   int[]   sort(int[]   arr)  
          {  
                  int   min   =   0;  
                  int   max   =   arr.length   -   1;  
                  System.out.println("min   =   "   +   min   +"         max   =   "   +   max);  
                  while   (min   <   max)  
                  {  
                          if   (arr[min]   <   0)   //   应该写成while的,但老是出错,我算法基础太差了!下同  
                          {  
                                  min   =   min   +   1;  
                          }  
                          if   (arr[max]   >=   0)  
                          {  
                                  max   =   max   -   1;  
                          }  
                          int   temp   =   arr[min];  
                          arr[min]   =   arr[max];  
                          arr[max]   =   temp;  
                          if   (max   -   1   ==   min)  
                                  break;  
                  }  
                  return   arr;  
          }  
   
          public   static   void   main(String[]   args)  
          {  
                  int[]   array   =   new   int[]   {   0,   2,   -1,   -3,   1,   -5,   -8,   -10,   2,   -20,   3};  
                  System.out.println(Arrays.toString(sort(array)));  
          }  
  }  
  Top

3 楼chouy(chouy)回复于 2006-06-05 15:54:37 得分 0

输出:  
  min   =   0         max   =   10  
  [-20,   -10,   -1,   -3,   -8,   -5,   1,   2,   2,   0,   3]Top

4 楼chouy(chouy)回复于 2006-06-05 16:15:34 得分 10

刚才的程序可能有问题!  
  再改了一下,用了while,应该会快一点儿.  
   
  import   java.util.Arrays;  
   
  public   class   QuickSort  
  {  
            /**  
                *   @param   arr    
                *                   被排列的数组  
                *   @param   sign    
                *                   排列数组的值,本例中是0  
                */  
          public   static   int[]   sort(int[]   arr,   int   sign)  
          {  
                  int   min   =   0;  
                  int   max   =   arr.length   -   1;  
                  System.out.println("min   =   "   +   min   +   "         max   =   "   +   max);  
                  while   (min   <   max)  
                  {  
                          while   (arr[min]   <   sign)  
                          {  
                                  min   =   min   +   1;  
                                  if   (min   ==   max)  
                                          break;  
                          }  
                          while   (arr[max]   >=   sign)  
                          {  
                                  max   =   max   -   1;  
                                  if   (min   ==   max)  
                                          break;  
                          }  
                          int   temp   =   arr[min];  
                          arr[min]   =   arr[max];  
                          arr[max]   =   temp;  
                          min++;  
                          max--;  
                  }  
                  return   arr;  
          }  
   
          public   static   void   main(String[]   args)  
          {  
                  int[]   array   =   new   int[]   {   -2,   -1,   11,   1,   0,   2,   -1,   -3,   1,   -5,   -8,   -10,   2,  
                                                                            -20,   3,   -20,   -2,   5,   29,   22,-22   };  
                  System.out.println(Arrays.toString(sort(array,   0)));  
          }  
  }Top

5 楼yifonger(逸枫)回复于 2006-06-05 17:32:39 得分 0

int[]   array   =   new   int[]   {   -2,   -1,   11,   1,   0,   2,   -1,   -3,   1,   -5,   -8,   -10,   2,  
                                                                            -20,   3,   -20,   -2,   5,   29,   22,-22   };  
                   
                  Arrays.sort(array);  
                   
                  System.out.println("最少的数:"+array[0]+"   最大的数:"+array[array.length-1]);  
  Top

相关问题

关键词

得分解答快速导航

  • 帖主:liaoliao4481
  • chouy
  • chouy

相关链接

  • CSDN Java频道
  • Java类图书
  • Java类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo