zoukankan      html  css  js  c++  java
  • 排序——冒泡排序

    从小到大排序

    冒泡排序:

    经过两次循环,在每次小循环的时候,比较左右两个数的大小(若左大右小,则交换顺序),依次比较,得到的是最大的那一个放在n-1处,

    然后小循环的范围缩小一个,依次进行比较,找出第二大的,放在n-2处,就像冒泡一样,数字按照从大到小一个一个的冒上来

    所以,外面的大循环要控制小循环比较的范围,应该倒序循环

    而里面的小循环则依次比较,直到大循环控制的边界处,则将最后的值放在此处即可。

    最主要的就是大循环从大到小(确定冒泡范围),小循环从小到大(寻找第i大的值)

    注:看结果,到后面会有很多交换其实已经结束了,但是还要继续循环,所以,设置一个exchange来标记,

    第i次循环,0 - i-1,i - n 分别为无序和有序

    若没有交换的话,证明前边的已经有序,所以不用继续了。

    4 2 1 6 3 6 0 -5 1 1
    2 1 4 3 6 0 -5 1 1 6
    1 2 3 4 0 -5 1 1 6 6
    1 2 3 0 -5 1 1 4 6 6
    1 2 0 -5 1 1 3 4 6 6
    1 0 -5 1 1 2 3 4 6 6
    0 -5 1 1 1 2 3 4 6 6
    -5 0 1 1 1 2 3 4 6 6
    -5 0 1 1 1 2 3 4 6 6
    -5 0 1 1 1 2 3 4 6 6(多余的)

    public class BubbleSort {
        public void bubbleSort(Integer[] arrays){
            if(arrays.length == 0 || arrays == null) return;
            int len = arrays.length;
            Boolean exchange;
            for(int i = len - 1; i > 0; i--){
                exchange = false;
                for(int j = 0; j < i; j++){
                    if(arrays[j] > arrays[j + 1]){
                        swap( arrays, j, j + 1 );
                        exchange = true;
                    }
                }
                if(!exchange) return;
            }
        }
        public void swap(Integer[] arrays, int left, int right){
            int temp = arrays[left];
            arrays[left] = arrays[right];
            arrays[right] = temp;
        }
    

      

      

    测试:

    import sort.BubbleSort;
    
    import static sort.PrintRes.print;
    
    /**
     * Created by Skye on 2018/3/27.
     */
    public class SortTest {
    
        public static void main(String[] args){
    
            Integer [] arrays = {4, 7, 9, 1, 8, 5, 2, 6, 3};
    
            print(arrays);
            BubbleSort bubbleSort = new BubbleSort();
            bubbleSort.bubbleSort(arrays);
            print(arrays);
        }
    }
    

      

    print方法

    package sort;
    
    /**
     * Created by Skye on 2018/3/27.
     */
    public class PrintRes {
    
        public static void print(Integer[] arrays){
            for(int i = 0; i < arrays.length; i++){
                System.out.print(arrays[i] + " ");
            }
            System.out.println();
        }
    }
    

      

  • 相关阅读:
    (转载) 随机数原理
    ZOJ 2588 Burning Bridges(求桥的数量,邻接表)
    生成不重复的随机数对(C/C++)
    比较两个文件是否相同(C/C++语言)
    计算文件大小(C/C++语言)
    (转载)Nim游戏博弈(收集完全版)
    将一串字符串全排列输出(回溯法)
    Linux中使用Crontab定时监测维护Tomcat应用程序的方法
    Nginx单向认证的安装配置
    非关系型数据库 2017-02-12 22:27 189人阅读 评论(2) 收藏
  • 原文地址:https://www.cnblogs.com/SkyeAngel/p/8656335.html
Copyright © 2011-2022 走看看