日期:2014-05-20  浏览次数:20623 次

[数据结构和算法]冒泡排序的小小总结!
看完数据结构和算法的冒泡排序,自己写写。
外层循环到底是要大于0,还是大于1,实验下就知道了!
Java code

package com.wxg.algorithm;

public class MaoPaoPaiXu {

    int[] arr = new int[10] ;
    ///arr = {10,39,2,55,87,29,37,45,90,100}; // 这种大括号初始化的方式只能用在声明时,其他地方都不行。
    //int[] arr1 = {10,39,2,55,87,29,37,45,90,100};
    
    /**
     * 这个sorted方法只适用于int类型的数组。
     * 要扩展成适用所有类型的数组是用object[],还是泛型呢? 
     */
    public static int[] sorted(int[] arr){
        for(int i=arr.length-1;i>0;i--){
            for(int j=0;j<i;j++){
                int temp = 0;
                if(arr[j+1] < arr[j]){
                    temp = arr[j+1];
                    arr[j+1] = arr[j] ;
                    arr[j] = temp ;
                }
            }
        }
        return arr ;
    }
    /**
     * 还是书上,作者的列子比较清晰。定义两个计数器:out,in ,
     * out外层的循环次数, 内层的循环计数in 每次都是从0开始。 
     * @param arr
     * @return
     */
    public static int[] bubbleSort(int[] arr){
        int out ,in ;
        int temp ;
        /**注意到书中的out>1即out=2将是最后一次循环。out>1是不对的,
         * 一次循环无法将0、1、2三个元素正确排序。特别是数组中的元素是倒序的
         * main方法中的arr2 即是,运行程序,发现还需要一次交换!*/
        for(out=arr.length-1;out>1;out--){
            for(in=0;in<out;in++){
                if(arr[in+1] < arr[in]){
                    temp = arr[in+1];
                    arr[in+1] = arr[in];
                    arr[in] = temp ;
                }
            }
        }
        return arr ;
    }
    /**
     * display方法也是只能循环打印 int 类型的数组
     * @param arr
     */
    public static void display(int[] arr){
        System.out.print("数组arr的所有元素: ");
        for(int i=0;i<arr.length;i++){
            // 千万不要写成i,而应该是arr[i]
            System.out.print(arr[i]+" ");
        }
        System.out.println("");
    }
    public static void main(String[] args) {
        int[] arr1 = {10,39,2,55,87,29,37,45,90,100};
        int[] arr2 = {100,99,78,68,57,45,41,40,32,30,22,11,8,5,3,1,0};
        /** 如果arr1 还是定义为类的成员变量,display和sorted方法不能直接调用。
         * 因为:静态方法不能调用非静态域。Cannot make a static reference to the non-static field arr
         * 必须创建一个对象,然后调用**/
        //display(arr);
        display(arr2);
        //sorted(arr1);
        bubbleSort(arr2);
        display(arr2);
    }
}






------解决方案--------------------
哈哈 很久没看到冒泡了 都快忘了
------解决方案--------------------
如果你热衷算法 不建议你搞java 压根没什么用
------解决方案--------------------
探讨

如果你热衷算法 不建议你搞java 压根没什么用

------解决方案--------------------
算法还是有用的 只是在Java中的比重不如C++吧
------解决方案--------------------
Java code

public class BubbleSort {
    static void bubbleSort(int[] arr){
        for(int i = 0; i < arr.length - 1; ++i){
            boolean flag = false;
            for(int j = 0; j < arr.length - i - 1; ++j){
                if(arr[j] > arr[j+1]){
                    flag = true;
                    int tmp = arr[j];
                    arr[j] = arr[j+1];
                    arr[j+1] = tmp;
                }
            }
            if(!flag)
                return;            
        }
    }
    public static void main(String[] args){
        int[] a = {2, 3, 6, 5, 4};
        bubbleSort(a);
        for(int i = 0; i < a.length; ++i)
            System.out.print(a[i] + "  ");
        System.out.println();
    }

}

------解决方案--------------------
不是java算法函数定义的很多,所以算法不用的吗?
------解决方案--------------------