java编程之排序

第一种排序:【冒泡排序】基本数据类型的排序。

【1】最简易的冒泡排序。效率低。因为比较的次数和趟数最多。

 1 /**
 2      * 最原始的冒泡排序。
 3      * 效率低。
 4      * 因为趟数和次数最多。都是按最大化的循环次数进行循环
 5     * @Title: sort 
 6     * @Description: TODO(这里用一句话描述这个方法的作用) 
 7     * @param arr
 8     * @return void    返回类型 
 9     * @author 尚晓飞
10     * @date 2014-8-5 上午8:42:45
11      */
12     public static void sort(int[] arr){
13                 //要走arr.length-1趟
14                 for(int i=0;i<arr.length-1;i++){
15                         System.out.println("第"+(i+1)+"趟");
16                     for(int j=0;j<arr.length-1;j++){
17                         
18                         if(arr[j]>arr[j+1]){
19                             int temp=arr[j];
20                             arr[j]=arr[j+1];
21                             arr[j+1]=temp;
22                         
23                         }
24                         System.out.println("第"+(j+1)+"次"+Arrays.toString(arr));
25                     }
26                 }
27                 System.out.println("TestSort.sort01()"+Arrays.toString(arr));
28     }
View Code

【2】进行一次优化的冒泡排序。减少每趟的比较次数。

 

 1 /**
 2      * 冒泡排序,减少每趟比较的次数.
 3      * 每一趟都能找到数列中相对最大的一个数。
 4      * 而每一次,都是进行数列中每两个相邻的数进行比较。需要比较数列长度-1次。才能完成一趟。
 5      * 由于每一趟都找出一个最大数,所以,找出的最大数,就不用再比较了,因此每一趟的比较次数就随着趟数的增加而减少。
 6     * @Title: sort01 
 7     * @Description: TODO(这里用一句话描述这个方法的作用) 
 8     * @param arr
 9     * @return void    返回类型 
10     * @author 尚晓飞
11     * @date 2014-8-4 下午8:37:45
12      */
13     public static void sort01(int[] arr){
14         //要走arr.length-1趟
15         for(int i=0;i<arr.length-1;i++){
16                 System.out.println("第"+(i+1)+"趟");
17             for(int j=0;j<arr.length-1-i;j++){
18                 
19                 if(arr[j]>arr[j+1]){
20                     int temp=arr[j];
21                     arr[j]=arr[j+1];
22                     arr[j+1]=temp;
23                 }
24                 System.out.println("第"+(j+1)+"次"+Arrays.toString(arr));
25             }
26         }
27         System.out.println("TestSort.sort01()"+Arrays.toString(arr));
28     }
View Code

 

【3】进行最终的优化。减少比较的趟数和次数

 

 1     /**
 2      * 冒泡排序。最终版,减少趟数并且也减少每趟的次数
 3     * @Title: sort02 
 4     * @Description: TODO(这里用一句话描述这个方法的作用) 
 5     * @param arr
 6     * @return void    返回类型 
 7     * @author 尚晓飞
 8     * @date 2014-8-4 下午8:52:59
 9      */
10     public static void sort02(int[] arr){
11                 //建立一个标示。如果数列已经排序完毕,则跳出循环,提高效率
12                 boolean flag=true;
13                 for(int i=0;i<arr.length-1;i++){
14                     System.out.println("第"+(i+1)+"趟");
15                      flag=true;
16                     for(int j=0;j<arr.length-1-i;j++){
17                         
18                         if(arr[j]>arr[j+1]){
19                             int temp=arr[j];
20                             arr[j]=arr[j+1];
21                             arr[j+1]=temp;
22                             //如果有相邻数字互换位置,说明数列还没有排好序,则将标示改成false,不让跳出循环
23                             flag=false;
24                         }
25                         System.out.println("第"+(j+1)+"次"+Arrays.toString(arr));
26                     }
27                     
28                     //在某一趟,已经没有相邻数据交换位置,说明,顺序已经排好,则跳出本层循环
29                     if(flag){
30                         break;
31                     }
32                     
33                 
34                 }
35                 System.out.println("TestSort.sort02()"+Arrays.toString(arr));
36     }
View Code

 

break,continu,return的区别:

break---->用于终止break所在的本层循环,对本层循环后边同层相邻的代码无影响,会执行后边的代码。

continu-->用于暂停本次循环,不执行continu后边循环体内的代码,继续下次循环。

return--->用于返回方法。无论多少层循环,无论处于什么位置,一旦执行到return,则方法终止运行。后边的代码,无论本层,还是他层,一概不执行。

 

java编程之排序,古老的榕树,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。