| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2010 人关注过本帖, 2 人收藏
标题:Java排序算法(无意中看见的,还不错,转来给大家看看)
只看楼主 加入收藏
流星雨
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:JAVA风暴
等 级:版主
威 望:43
帖 子:1854
专家分:1868
注 册:2004-5-30
结帖率:56.76%
收藏(2)
已结贴  问题点数:1 回复次数:15 
Java排序算法(无意中看见的,还不错,转来给大家看看)
package com.cucu.test;

/**
 * @author http://www. <a href=mailto:cg@
 * @version 1.0
 */
public class Sort {

  public void swap(int a[], int i, int j) {
    int tmp = a[i];
    a[i] = a[j];
    a[j] = tmp;
  }

  public int partition(int a[], int low, int high) {
    int pivot, p_pos, i;
    p_pos = low;
    pivot = a[p_pos];
    for (i = low + 1; i <= high; i++) {
      if (a[i] > pivot) {
        p_pos++;
        swap(a, p_pos, i);
      }
    }
    swap(a, low, p_pos);
    return p_pos;
  }

  public void quicksort(int a[], int low, int high) {
    int pivot;
    if (low < high) {
      pivot = partition(a, low, high);
      quicksort(a, low, pivot - 1);
      quicksort(a, pivot + 1, high);
    }

  }

  public static void main(String args[]) {
    int vec[] = new int[] { 37, 47, 23, -5, 19, 56 };
    int temp;
    //选择排序法(Selection Sort)
    long begin = System.currentTimeMillis();
    for (int k = 0; k < 1000000; k++) {
      for (int i = 0; i < vec.length; i++) {
        for (int j = i; j < vec.length; j++) {
          if (vec[j] > vec[i]) {
            temp = vec[i];
            vec[i] = vec[j];
            vec[j] = temp;
          }
        }

      }
    }
    long end = System.currentTimeMillis();
    System.out.println("选择法用时为:" + (end - begin));
    //打印排序好的结果
    for (int i = 0; i < vec.length; i++) {
      System.out.println(vec[i]);
    }
    //  冒泡排序法(Bubble Sort)
    begin = System.currentTimeMillis();
    for (int k = 0; k < 1000000; k++) {
      for (int i = 0; i < vec.length; i++) {
        for (int j = i; j < vec.length - 1; j++) {
          if (vec[j + 1] > vec[j]) {
            temp = vec[j + 1];
            vec[j + 1] = vec[j];
            vec[j] = temp;
          }
        }

      }
    }
    end = System.currentTimeMillis();
    System.out.println("冒泡法用时为:" + (end - begin));
    //打印排序好的结果
    for (int i = 0; i < vec.length; i++) {
      System.out.println(vec[i]);
    }

    //插入排序法(Insertion Sort)
    begin = System.currentTimeMillis();
    for (int k = 0; k < 1000000; k++) {
      for (int i = 1; i < vec.length; i++) {
        int j = i;
        while (vec[j - 1] < vec[i]) {
          vec[j] = vec[j - 1];
          j--;
          if (j <= 0) {
            break;
          }
        }
        vec[j] = vec[i];
      }
    }
    end = System.currentTimeMillis();
    System.out.println("插入法用时为:" + (end - begin));
    //打印排序好的结果
    for (int i = 0; i < vec.length; i++) {
      System.out.println(vec[i]);
    }

    //快速排序法(Quick Sort)

    Sort s = new Sort();
    begin = System.currentTimeMillis();
    for (int k = 0; k < 1000000; k++) {
      s.quicksort(vec, 0, 5);
    }
    end = System.currentTimeMillis();
    System.out.println("快速法用时为:" + (end - begin));
    //打印排序好的结果
    for (int i = 0; i < vec.length; i++) {
      System.out.println(vec[i]);
    }
  }

}
以下是运行结果:
选择法用时为:234
56
47
37
23
19
-5
冒泡法用时为:172
56
47
37
23
19
-5
插入法用时为:78
56
47
37
23
19
-5
快速法用时为:297
56
47
37
23
19
-5
搜索更多相关主题的帖子: 算法 Java 
2009-10-29 15:14
gameohyes
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:湖南
等 级:版主
威 望:53
帖 子:1275
专家分:3629
注 册:2009-3-5
收藏
得分:0 
经典

C#超级群 74862681,欢迎大家的到来!
2009-10-29 16:00
lampeter123
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:54
帖 子:2508
专家分:6424
注 册:2009-1-30
收藏
得分:0 
以上算法都比不上Arrays.sort(). Arrays.sort()的效率是最高的

你的优秀和我的人生无关!!!!
    
    我要过的,是属于我自己的生活~~~
2009-10-30 09:24
gameohyes
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:湖南
等 级:版主
威 望:53
帖 子:1275
专家分:3629
注 册:2009-3-5
收藏
得分:0 
不过自己知底层代码还是有好处的。至少能够深入理解还有懂得这原理

C#超级群 74862681,欢迎大家的到来!
2009-10-30 09:33
windizual
Rank: 3Rank: 3
等 级:论坛游侠
威 望:4
帖 子:124
专家分:186
注 册:2009-7-1
收藏
得分:0 
有些大点的公司就喜欢玩些让你写算法啊之类的,所以知道点要比较好

Java要学的东西好多~~~~~
2009-10-30 11:39
冰雪天
Rank: 2
来 自:陕西咸阳
等 级:论坛游民
帖 子:60
专家分:34
注 册:2009-9-4
收藏
得分:0 
System.currentTimeMillis()这方法咋用呀!


我愛滑板!!!
2009-10-31 13:50
lampeter123
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:54
帖 子:2508
专家分:6424
注 册:2009-1-30
收藏
得分:1 
以下是引用冰雪天在2009-10-31 13:50:18的发言:

System.currentTimeMillis()这方法咋用呀!
帮你查了一下API:System.currentTimeMillis()返回当前时间与协调世界时 1970 年 1 月 1 日午夜之间的时间差(以毫秒为单位测量)。这里是用于计算程序的运行时间

你的优秀和我的人生无关!!!!
    
    我要过的,是属于我自己的生活~~~
2009-10-31 13:57
lampeter123
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:54
帖 子:2508
专家分:6424
注 册:2009-1-30
收藏
得分:0 
以下是引用windizual在2009-10-30 11:39:39的发言:

有些大点的公司就喜欢玩些让你写算法啊之类的,所以知道点要比较好
如果不是到大公司面试,我建议大家还是选用Arrays.sort()方法来排序

我用以下程序做过测试
import java.util.*;

public class Sort2 {

 
  public static void main(String args[]) {
    int vec[] = new int[10000];
    Random ran = new Random();
    for (int i=0;i<10000;i++) {
            int value = ran.nextInt(10000)+1;
            vec[i]= value;
    }

    System.out.println("Before sort:");
    for (int i = 0; i < vec.length; i++) {
             System.out.println(vec[i]);
    }  
  
    long begin = System.currentTimeMillis();
    Arrays.sort(vec);
    long end = System.currentTimeMillis();
    System.out.println("Arrays Sort:" + (end - begin));
 
    System.out.println("After sort:");
    for (int i = 0; i < vec.length; i++) {
             System.out.println(vec[i]);
    }
   
  }

}

对100000个元素的数组排序,用时32
对1000000个元素的数组排序,用时234
对10000000个元素的数组排序,用时2703


[ 本帖最后由 lampeter123 于 2009-10-31 15:17 编辑 ]

你的优秀和我的人生无关!!!!
    
    我要过的,是属于我自己的生活~~~
2009-10-31 14:41
yangchch786
Rank: 1
等 级:新手上路
帖 子:29
专家分:0
注 册:2009-10-25
收藏
得分:0 
收藏了
2009-11-01 18:31
zhsxin
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2009-10-21
收藏
得分:0 
hao
2009-11-04 11:17
快速回复:Java排序算法(无意中看见的,还不错,转来给大家看看)
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.023102 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved