zoukankan      html  css  js  c++  java
  • 数据结构

    冒泡排序

    1、算法描述

    给定一个数组,用第一个元素与第二个元素比较,如果大于第二元素,则交换,接下来,比较第二个和第三个,依次到最后一个元素。如果有给定的数组元素有n个,那么需要重复n-1次上面的过程。为何为冒泡算法,因为每一轮的比较,都是由相邻两个元素比较交换,把大元素依次的交换到最后一个元素,如同气泡冒出水面

    2、算法简单实现

    3、代码实现
    /**
     * @author xuwanglu
     * @Description: 冒泡排序
     * @date 2019/1/20 5:05 PM
     * <p>
     * 冒泡排序:给定一个数组,使用数组第一个元素和第二个元素比较,大则交换,小则不变,在第二个和第三比较,依次把最大的冒泡到最后一个元素。这样就把最大元素冒泡到最后了。
     * 后面则依次把第一个到倒数二个元素冒出第二大元素,依次排序完。时间复杂度为O(n2)
     */
    public class BubbleSort {
    
        public static void bubbleSort(int[] array) {
    
            for (int i = 0; i < array.length; i++) {
                for (int j = 0; j < array.length - i - 1; j++) {
                    if (array[j] > array[j + 1]) {
                        SwapUtils.swap(j, j + 1, array);
                    }
                }
            }
        }
    
        public static void main(String[] args) {
            int[] array = {2, 4, 6, 0, 11, 3, 5, 6, 3};
            BubbleSort.bubbleSort(array);
            PrintUtils.print(array);
        }
    
    }
    
    
    4、优化

    当如果给定[1,2,3,4,5,6]数组时,则在原来的冒泡排序下,还是需要n-1轮比较,其实这已有序,不需要比较了,那么这种情况我么可以在内循环加一个标记,记录一轮比较下来是否有发生元素交换,如果没有则说明有序,无需继续下面的比较。

    /**
         * 优化后冒泡排序
         * 如果一趟下来都没有交换的化,那么说明已经有序了,所以可以加一个标记,查看是否一趟下来有交换,没有的化则不需要比较了
         *
         * @param array
         */
        public static void bubbleSortWithOptimized(int[] array) {
    
            for (int i = 0; i < array.length; i++) {
                int flag = 0;
                for (int j = 0; j < array.length - i - 1; j++) {
                    if (array[j] > array[j + 1]) {
                        flag++;
                        SwapUtils.swap(j, j + 1, array);
                    }
                }
                if (flag == 0) {
                    break;
                }
            }
        }
    
  • 相关阅读:
    TCP/IP和HTTP协议代理
    HTTP与HTTPS的区别
    HTTP头HOST
    租户、租户管理员、部门管理员和开发者在APIGW中的角色
    HTTP协议扫盲(八 )响应报文之 Transfer-Encoding=chunked方式
    Java的Socket通信
    开发一个http代理服务器
    需求迭代:迭代需求矩阵
    产品功能对标
    GIT入门笔记(20)- 使用eclipse 基于 git 开发过程梳理
  • 原文地址:https://www.cnblogs.com/xwlmdd/p/10296318.html
Copyright © 2011-2022 走看看