冒泡排序

冒泡排序  有轻气泡上浮和较大值后移两种,只不过换汤不换药理解一种另一个也非常简单。 注意冒泡是针对 int类型的数组  其他类型的不适合

基本逻辑  

两层循环  为什么不是一层  三层  四层呢?

因为冒泡 是比较两个相邻的元素 ,比较后较大值后移。所以一层只能保证 最大的值在最后并不能保证所有元素排序的正确性

例如  3 5 2   冒泡后  3  2  5 显然 3是要比2大的但是 3却在2的前面,所以一层循环不够。

而两层循环就可以了

变量i为0 时可以 找到最大值 i加一找到第二大的数值 循环结束前 找到最小值 正好可以完成冒泡排序

int [] arr = {1,2,3,10,5,9,6};

    for(int i=0;i<arr.length-1;i++){
            boolean iswap=false;
            for(int k=0;k<arr.length-i-1;k++){
                if(arr[k]>arr[k+1]){
                    int m=arr[k];
                    arr[k]=arr[k+1];
                    arr[k+1]=m;
                    iswap=true;
                }
                
            }
            if(!iswap){
                break;
            }
            System.out.println(Arrays.toString(arr));
        }

原来的 {1,2,3,10,5,9,6}

输出的 [1, 2, 3, 5, 9, 6, 10]
    [1, 2, 3, 5, 6, 9, 10]

从左向右比较 最大的先到最右

int [] arr = {1,2,3,10,5,9,6};

for(int i=0;i<arr.length-1;i++){
            boolean iswap = false;
            for(int k=arr.length-1;k>i;k--){
                if(arr[k]<arr[k-1]){
                    int m =arr[k];
                    arr[k]=arr[k-1];
                    arr[k-1]=m;
                    iswap=true;
                }
            }
            if(!iswap){
                break;
            }
            System.out.println(Arrays.toString(arr));
        }

原来的 {1,2,3,10,5,9,6}

输出的 [1, 2, 3, 5, 10, 6, 9]
     [1, 2, 3, 5, 6, 10, 9]
     [1, 2, 3, 5, 6, 9, 10]

从右向左 小的向左移位 最小的先到左

posted @ 2017-02-28 11:59  奋斗的渣渣  阅读(125)  评论(0编辑  收藏  举报