文档章节

排序算法-冒泡排序算法

Clarence_D
 Clarence_D
发布于 2017/09/01 17:25
字数 1089
阅读 71
收藏 1

    冒泡排序算法是所有排序算法中最简单、最基础的一种。冒泡排序算法的思路就是交换排序,通过相邻数据的交换来达到排序的目的。

冒泡排序算法

    冒泡排序算法通过多次比较和交换来实现排序,其排序流程如下:

  • 对数组中的各数据,依次比较相邻的两个元素的大小。
  • 如果前面的数据大于后面的数据,就交换这两个数据。经过一轮的多次比较排序后,便可将最大的数据排好。
  • 在用同样的方法把剩下的数据逐个进行比较,最后便可按照从小到大的排序排好数组各数据。

    为了更好的理解冒泡排序算法的执行过程,下面举一个实际的例子来一步一步的执行冒泡排序算法。对于6个整形数据52、23、18、84、58、11,这是一组无序的数据。对齐执行排序效果如下所示。

    从上面的例子可以非常直观地了解到冒泡排序算法执行过程。整个排序过程就像水泡的浮起过程,故此而得名。冒泡排序算法在对n个数据进行排序時,无论原数据有无序,都需要进行n-1步的中间排序。这种排序方法思路简单直观,但是缺点是执行的步骤稍长,效率不高。

    一种改进的方式,即在每次中间排序之后,比较一下数据是否已经按照顺序排列完成,否则继续进行冒泡排序。这样可以加速算法的执行过程。

冒泡排序算法实例

    根据上面的基本的思想,我们来动手写一个例子说明冒泡排序在排序中的应用。

package Bubble;

public class BubbleAlgorithm {
    public static void bunnle(int[] a){
        int temp;

        for (int i = 1; i < a.length; i++) {
            for (int j = 0; j < a.length-1; j++) {
                if (a[j] > a[j+1]){
                    temp = a[j];
                    a[j] = a[j+1];
                    a[j] = temp;
                }
            }
            System.out.print("第"+i+"步排序结果:");
            for (int k = 0; k < a.length; k++) {
                System.out.print(" "+a[k]);
            }
            System.out.println("\n");
        }
    }

    public static void main(String[] args) {
        int[] aa = {196,182,123,104,111,106,185,194,192,159};
        System.out.print("       初始值:");
        for (int i = 0; i < aa.length ; i++) {
            System.out.print(" "+aa[i]);
        }
        System.out.println("\n");
        bunnle(aa);
    }
}

运行结果如下:

      初始值: 196 182 123 104 111 106 185 194 192 159
第1步排序结果: 182 123 104 111 106 185 194 192 159 196
第2步排序结果: 123 104 111 106 182 185 192 159 194 196
第3步排序结果: 104 111 106 123 182 185 159 192 194 196
第4步排序结果: 104 106 111 123 182 159 185 192 194 196
第5步排序结果: 104 106 111 123 159 182 185 192 194 196
第6步排序结果: 104 106 111 123 159 182 185 192 194 196
第7步排序结果: 104 106 111 123 159 182 185 192 194 196
第8步排序结果: 104 106 111 123 159 182 185 192 194 196
第9步排序结果: 104 106 111 123 159 182 185 192 194 196

图中显示了每一步排序的中间结果。从中可以看出第5步之后便已经完成对数据的排序,但是算法仍然需要进行后续的比较步骤。根据上面介绍的思路,加入判断部分,使之能够尽早结束排序过程,从而提高程序的执行效率。调优方法如下:

package Bubble;

public class BubbleAlgorithm {
    public static void bunnle(int[] a){
        int temp;
        //定义
        int fay = 0;

        for (int i = 1; i < a.length; i++) {
            for (int j = 0; j < a.length-1; j++) {
                if (a[j] > a[j+1]){
                    temp = a[j];
                    a[j] = a[j+1];
                    a[j+1] = temp;
                }
            }
            System.out.print("第"+i+"步排序结果:");
            for (int k = 0; k < a.length; k++) {
                //开始
                if (a.length-2 >= k){
                    if (a[k]>a[k+1]){
                        fay = 1;
                    }
                }
                //结束
                System.out.print(" "+a[k]);
            }
            //开始
            if (fay == 0){
                break;
            }else {
                fay = 0;
            }
            //结束
            System.out.println("\n");
        }
    }

    public static void main(String[] args) {
        int[] aa = {196,182,123,104,111,106,185,194,192,159};
        System.out.print("       初始值:");
        for (int i = 0; i < aa.length ; i++) {
            System.out.print(" "+aa[i]);
        }
        System.out.println("\n");
        bunnle(aa);
    }
}

输出结果如下:

      初始值: 196 182 123 104 111 106 185 194 192 159
第1步排序结果: 182 123 104 111 106 185 194 192 159 196
第2步排序结果: 123 104 111 106 182 185 192 159 194 196
第3步排序结果: 104 111 106 123 182 185 159 192 194 196
第4步排序结果: 104 106 111 123 182 159 185 192 194 196
第5步排序结果: 104 106 111 123 159 182 185 192 194 196

 

© 著作权归作者所有

Clarence_D
粉丝 10
博文 137
码字总数 108689
作品 0
天津
程序员
私信 提问
排序算法——冒泡排序VS插入排序

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_26545305/article/details/87988991 一、概述 最经典、最常用的排序算法有:冒泡排序、插入排序、选择排序...

LemmonTreelss
03/04
0
0
排序(上):冒泡排序、插入排序和选择排序

如何分析一个排序算法? 分析一个排序算法的三要素:排序算法的执行效率、排序算法的内存消耗以及排序算法的稳定性。 排序算法的执行效率 对于排序算法执行效率的分析,一般是从以下三个方面...

hardyyao
2018/11/04
0
0
JavaScript 数据结构与算法之美 - 冒泡排序、插入排序、选择排序

1. 前言 算法为王。 想学好前端,先练好内功,只有内功深厚者,前端之路才会走得更远。 笔者写的 JavaScript 数据结构与算法之美 系列用的语言是 JavaScript ,旨在入门数据结构与算法和方便...

天明夜尽
07/22
0
0
面试 9:Java 玩转冒泡排序

面试 9:用 Java 实现冒泡排序 南尘的朋友们,新的一周好,原本打算继续讲链表考点算法的,这里姑且是卡一段。虽然在我们 Android 开发中,很少涉及到排序算法,因为基本官方都帮我们封装好了...

nanchen2251
2018/07/16
0
0
数据结构/算法——冒泡排序算法*

最原始的排序方法是只取出最大的,而冒泡排序除了出去最大的,还要将相邻的2个元素的位置互换。 冒泡排序是排序算法里比较简单的算法,即循环n轮,每轮都冒出个最大的,同时相邻的2个元素的位...

cjun1990
2015/10/10
132
0

没有更多内容

加载失败,请刷新页面

加载更多

java通过ServerSocket与Socket实现通信

首先说一下ServerSocket与Socket. 1.ServerSocket ServerSocket是用来监听客户端Socket连接的类,如果没有连接会一直处于等待状态. ServetSocket有三个构造方法: (1) ServerSocket(int port);...

Blueeeeeee
20分钟前
2
0
用 Sphinx 搭建博客时,如何自定义插件?

之前有不少同学看过我的个人博客(http://python-online.cn),也根据我写的教程完成了自己个人站点的搭建。 点此:使用 Python 30分钟 教你快速搭建一个博客 为防有的同学不清楚 Sphinx ,这...

王炳明
昨天
4
0
黑客之道-40本书籍助你快速入门黑客技术免费下载

场景 黑客是一个中文词语,皆源自英文hacker,随着灰鸽子的出现,灰鸽子成为了很多假借黑客名义控制他人电脑的黑客技术,于是出现了“骇客”与"黑客"分家。2012年电影频道节目中心出品的电影...

badaoliumang
昨天
13
0
很遗憾,没有一篇文章能讲清楚线程的生命周期!

(手机横屏看源码更方便) 注:java源码分析部分如无特殊说明均基于 java8 版本。 简介 大家都知道线程是有生命周期,但是彤哥可以认真负责地告诉你网上几乎没有一篇文章讲得是完全正确的。 ...

彤哥读源码
昨天
13
0
jquery--DOM操作基础

本文转载于:专业的前端网站➭jquery--DOM操作基础 元素的访问 元素属性操作 获取:attr(name);$("#my").attr("src"); 设置:attr(name,value);$("#myImg").attr("src","images/1.jpg"); ......

前端老手
昨天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部