Java常用三种算法排序比较

Java常用三种算法排序比较

冒泡排序:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
package  demo1;
/**
  *
  * @author xiaoye 2014-5-13
  */
/**
  * 有N 个数据需要排序,则从第0 个数开始,依次比较第0 和第1 个数据,
  * 如果第0 个大于第1 个则两者交换,否则什么动作都不做,继续比较第 1 个第2个…,
  * 这样依次类推,直至所有数据都“冒泡”到数据顶上。
    冒泡排序的效率 O(N*N ),比较 N*N/2 ,交换N*N/4 。
  */
public  class  BubbleSort {
     private  static  int [] num = {  1 3 6 8 2 4 5 7 9  };
     public  static  void  bubbleSort() {
         int  size = num.length;
         for  ( int  i =  0 ; i < size; i++) {
             for  ( int  j =  0 ; j < size - i -  1 ; j++) {
                 if  (num[j] > num[j +  1 ]) {
                     int  temp = num[j];
                     num[j] = num[j +  1 ];
                     num[j +  1 ] = temp;
                 }
             }
         }
         System.out.println( "冒泡排序:" );
         for  ( int  i =  0 ; i < size; i++) {
             System.out.print(num[i] +  " " );
         }
     }
     public  static  void  main(String[] args) {
         bubbleSort();
     }
}


选择排序:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
package  demo1;
/**
  *
  * @author xiaoye 2014-5-13
  */
/**
  * 说明: 有N 个数据需要排序 ,
  * 假设下标为0的数据为最小下标放在变量min中用i标记最左边为被排序的数据下标,
  * 用j标记第1条数据依次与min比较,如果比min小,则将标记为j的数据与min的交换,
  * 依次类推。选择排序的效率:O(N*N ),比较 N*N/2 ,交换<N;
  * 选择排序与冒泡排序比较,比较次数没有明显改变,但交换次数明显减少了很多。
  */
public  class  SelectSort {
     private  static  int [] num = {  1 3 6 8 2 4 5 7 9  };
     public  static  void  main(String[] args) {
         int  size = num.length;
         for  ( int  i =  0 ; i < size -  1 ; i++) {
             int  min = i;
             int  temp = num[i];
             for  ( int  j = i +  1 ; j < size; j++) {
                 if  (num[j] < num[min]) {
                     min = j;
                 }
             }
             num[i] = num[min];
             num[min] = temp;
         }
         System.out.println( "\n选择排序:" );
         for  ( int  m =  0 ; m < size; m++) {
             System.out.print(num[m] +  " " );
         }
     }
}


插入排序:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
package  demo1;
/**
  *
  *@author xiaoye
  *2014-5-13
  */
/**
  * 说明:插入排序是在部分数据有序的情况下,使用i标记第一个无序的数据,
  * 将其提取保存到一个中间变量temp中去,使用 j标记空位置,
  * 依次比较 temp中的值与j-1的值,如果 j-1值大于temp的值,则后移,
  * 直到遇到第一个比 temp小的值,在其下一个位置插入。
    插入排序的效率:O(N*N ),  比较N*N/4 ,复制 N*N/4 ;
    插入排序在随机数的情况下,比冒泡快一倍,比选择稍快;
    在基本有序的数组中,插入排序几乎只需要O(N);在逆序情况下,并不比冒泡快。
  */
public  class  InsertSort {
     private  static  int [] num = {  1 3 6 8 2 4 5 7 9  };
     public  static  void  insertSort() {
         int  size = num.length;
         for  ( int  i =  0 ; i < size; i++) {
             int  temp = num[i];
             int  j = i;
             while  (j >  0  && num[j -  1 ] > temp) {
                 num[j] = num[j -  1 ];
                 --j;
             }
             num[j] = temp;
         }
         System.out.println( "\n插入排序:" );
         for  ( int  m =  0 ; m < size; m++) {
             System.out.print(num[m] +  " " );
         }
     }
     public  static  void  main(String[] args) {
         insertSort();
     }
}









本文转自 小夜的传说 51CTO博客,原文链接:http://blog.51cto.com/1936625305/1410711,如需转载请自行联系原作者
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值