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

    给一组数字,要求从小到大排序;

    1.时间复杂度  O(n2) ,空间复杂度 O(n+1);

    2.基本思想:两个数比较大小,较小的数下沉,较大的数冒起来;

    3.冒泡过程:  

               1.从第零个位置开始,第零个位置的数和第一个位置的数比较,大的交换到第一个位置(冒出来);然后第一个位置的数和第二个位置上的数比较大小,大的数交换到第二个位置(冒出来);

                 依次类推,遍历到倒数第二个数的时候,最大的值就冒出来了,排在最后的位置;

               2.然后排序剩余的数;以为最后以为已经是最大的了,不需要改变,所以只排序剩余的数;

    4.代码:

    public void bubbleSort(int[] array, int length){
            //排序的趟数,如果2个数,需要排1次,所以排序趟数为length - 1;
            for(int i = 0; i < length - 1; i++) { 
                //冒泡的过程
                for(int j = 0; j < length - 1 - i; j++) {
                    if(array[j] > array[j + 1]){
                        int temp = array[j];
                        array[j] = array[j + 1];
                        array[j + 1] = temp;
                    }
                }
            }
        }

     5.优化:如果已经有序,冒泡排序依然进行;设置一个标志位,如果冒泡过程中没有交换位置,证明已经有序,结束排序;

    public void bubbleSort1(int[] array, int length){
            //标志位,如果冒泡的过程没有发送交换,证明已经有序,结束排序;
            Boolean flag;
            //排序的趟数,如果2个数,需要排1次,所以排序趟数为length - 1;
            for(int i = 0; i < length - 1; i++) {
                //冒泡的过程
                flag = false;
                for(int j = 0; j < length - 1 - i; j++) {
                    if(array[j] > array[j + 1]){
                        int temp = array[j];
                        array[j] = array[j + 1];
                        array[j + 1] = temp;
                        flag = true;
                    }
                }
                if(!flag) {
                    break;
                }
            }
        }

          

               

  • 相关阅读:
    LNMP编译
    数据库(二)tab补全功能,使数据库支持简体中文,日志管理,备份脚本
    MySQL数据库(一)编译安装、安装后优化操作及超户忘记数据库密码的解决方法
    awk简题
    NFS
    WCF 传递数据量大时的报错处理
    Windows服务工程创建、部署
    反射创建BLL层控制器
    php yii环境简易配置
    php 搭建mvc框架
  • 原文地址:https://www.cnblogs.com/smailjunk/p/10441659.html
Copyright © 2011-2022 走看看