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

    冒泡排序

    逻辑思想看注释

    普通版:

    //冒泡排序
    public class BubbleSort {
        public static void sort(int[] arr){
            for (int i = arr.length-1; i >0 ; i--) {//外层循环:将边界向左移。(每排好一次,最右边就已经为最大的值了)
                for (int j = 0; j < i; j++) {//内层循环实现将最大数移到右边界
                	if (arr[j]>arr[j+1]){//判断是否满足交换的条件
                    	TestUtils.swap(arr,j,j+1);//交换--这里是我自己封装的交换方法,方便观看整体逻辑。等同于下方注释内容
                        /*
                        arr[j]=arr[j] ^ arr[j+1];
                        arr[j+1]=arr[j] ^ arr[j+1];
                        arr[j]=arr[j] ^ arr[j+1];
                        */
                	}
            	}
            }
        }
    }
    

    优化后:加上了交换次数的判断条件

    思想:如果某次循环后交换次数为0,则说明已经为有序,直接退出循环。

    package com.zx.sort.bubbleSort;
    
    import com.zx.sort.util.TestUtils;
    
    import java.util.Arrays;
    
    /**
     * @Description: com.zx.sort.bubbleSort
     * @version: 1.0
     */
    //冒泡排序
    public class BubbleSort {
        public static void sort(int[] arr){
            int index=1;//记录交换的次数,初始化为1,进入交换
            int time=0;//初始化循环的次数 测试输出-可以省略
            for (int i = arr.length-1; i >0 ; i--) {
                if (index!=0){
                    //把最大数放最右边
                    index = setMaxRight(arr, i, index);//返回交换的次数
                    System.out.println("第"+(++time)+"次循环交换次数:"+index);//测试输出-可以省略
                }else {//说明已经排好序
                    break;
                }
            }
    
        }
        //把最大数放最右边
        public static int setMaxRight(int[] arr,int right,int index){//right为数组右边界下标位置,默认为arr.length-1
            index=0;//每次进来时归零(刷新交换次数)
            for (int j = 0; j < right; j++) {
                if (arr[j]>arr[j+1]){
                    TestUtils.swap(arr,j,j+1);//交换
                    index++;//记录交换次数
                }
            }
            return index;
        }
    }
    
    
  • 相关阅读:
    一、面试准备Java知识
    SSM框架学习之Spring学习笔记
    新年过后 第一天上班
    tomcat学习笔记
    第一次写博客
    SQL Server 2005 数据类型 .NET Framework 数据类型 LINQ 数据类型
    Winform下编译Dev控件时提示license.licx文件错误
    将C#数据转化成Word文档
    得到相同的数据 雨
    SQl 2005 存储过程分页 雨
  • 原文地址:https://www.cnblogs.com/code-xu/p/14548971.html
Copyright © 2011-2022 走看看