白话排序算法--冒泡排序

前言:

  这两天研究排序的算法,算法理解起来比较抽象,不拿笔划着走着就容易绕进去,所以就想出了以体育课排队列的方式进行演示

  系列的其他篇章的情景同上


冒泡排序:  重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该      数列已经排序完成。

情景描述:

  体育课上,老师需要一个纵列(从低到高竖着站一排),集合的时候大家随便凑了一列,但是高低不齐,一共6个人这时老师说,我给你们个办法,按照我的办法,你们自己排列队形。

  1. 从第一个同学开始,如果前一个同学比后一个同学个子高了,就交换位置,否则不动
  2. 第二个再和第三个同学比较,依次类推,直到最后一个同学没人比较了,他是最高的,依次冒泡排序完毕
  3. 排除已确定的同学,重复步骤1和2,持续每次越来越少的同学进行比较换位
  4. 直到需要比较的同学剩一个了,就无需比较,队列已经是由低往高依次排列了

  就这样,同学们换来换去,一遍又一遍,自己完成了队列的排列.....



代码片段:

  /**
     * 冒泡排序:每次只能确定一位最大的,放置数组末尾 ,下次忽略已经确定的最大值继续比较
     * 优点:稳定
     * 缺点:效率底下(重复相邻数据比较,且每次比较都会进行位置置换)
     * @param arr
     * @return
     */
    public static int[] bubbleSort(int[] arr) {
        int len = arr.length; // 数组长度
        for (int i = 0; i < len; i++) { // 遍历数组,用来限制内循环次数
            for (int j = 1; j < len - i; j++) { // 内循环,依次减少1个次数(即为比较几次,就忽略后几位)
                if (arr[j - 1] > arr[j]) { // 如果前一位大于后一位,即 前>后,需要交换位置
                    int k = arr[j - 1]; // 把前面的先缓存起来
                    arr[j - 1] = arr[j]; // 让前面的等于后一位
                    arr[j] = k; // 后一位等于前一位之前的缓存值
                }
            }
        }
        return arr;
    }

  所以,在数据较少的时候还是可以采用的,但数据大量时应该避免使用,选择其他排序方式。

                              写作不易,难免有疏漏和错误,还请慷慨指正,不错请推荐

   ps:欢迎转载,转载请注明出处:http://www.cnblogs.com/liuyitian/p/4054437.html



  接下来会陆续更新其他排序方法(插入、选择、快速排序),然后会把一系列的地址整合到一起...

  下班了....撤 ):



                                      每天多学一点点     代码少敲一点点             

时间: 2024-08-13 23:07:54

白话排序算法--冒泡排序的相关文章

经典排序算法 - 冒泡排序Bubble sort

 原文出自于 http://www.cnblogs.com/kkun/archive/2011/11/23/bubble_sort.html 经典排序算法 - 冒泡排序Bubble sort 原理是临近的数字两两进行比较,按照从小到大或者从大到小的顺序进行交换, 这样一趟过去后,最大或最小的数字被交换到了最后一位, 然后再从头开始进行两两比较交换,直到倒数第二位时结束,其余类似看例子 例子为从小到大排序, 原始待排序数组| 6 | 2 | 4 | 1 | 5 | 9 | 第一趟排序(外循环) 第

排序算法—冒泡排序

*/--> 排序算法-冒泡排序 Table of Contents 1 问题描述 2 冒泡排序(Bubble) 2.1 冒泡排序(一) 2.2 冒泡排序(二) 2.3 冒泡排序(三) 2.4 冒泡排序(四) 3 阅读参考 1 问题描述 引子 排序是数据结构中十分重要的一章,排序算法有很多种,一直没时间整理而且很多排序算法理解的也不是很透彻.希望通过这次整理吃透吧! 排序算法十分多,故分篇进行整理. 说明 本文重点是理解排序算法,而不是完整的程序,所以每节都只有具体排序算法的接口.没有完整的源代码

C语言中的排序算法--冒泡排序,选择排序,希尔排序

冒泡排序(Bubble Sort,台湾译为:泡沫排序或气泡排序)是一种简单的排序算法.它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成.这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端 维基百科:点击打开链接 [cpp] view plain copy /* 用选择法对10个数进行排序 */ #include<stdio.h> void main() { int i,j,

排序算法-冒泡排序(改),选择排序

上次说冒泡排序留下2个问题,一个是选择排序,一个是冒泡排序性能,这次会先说选择排序,然后说冒泡排序的优化 一选择排序 选择排序是一种简单直观的排序算法.它的工作原理是每一次从待排序的元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完 流程: (有小到大排序) 第一轮 将0位元素与后续所有元素比较,将小的元素放在0位 第二轮 将1位元素与后续所有元素比较,将小的元素放在1位 ... 直到最后一位 代码上次已经贴出,这里复制下 1 public static vo

算法 排序算法--冒泡排序

冒泡排序是排序算法的一种,思路清晰,代码简洁,常被用在大学生计算机课程中. “冒泡”这个名字的由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端,故名. 这里以从小到大排序为例进行讲解. 基本思想及举例说明 冒泡排序的基本思想就是不断比较相邻的两个数,让较大的元素不断地往后移.经过一轮比较,就选出最大的数:经过第2轮比较,就选出次大的数,以此类推. 下面以对 3  2  4  1 进行冒泡排序说明. 第一轮 排序过程3  2  4  1    (最初)2  3  4  2    (比较3和2,

排序算法(冒泡排序,选择排序,插入排序,快速排序)

数组的排序算法 选择排序 每次选择所要排序得数组中的最大值(由大到小排序,由小到大排序则选择最小值)的数组元素,将这个数组元组的值与最前面没有排序的数组元素进行交换, 第一次排序之后,最大的数字来到了第一位,再从第二个元素开始找,找到最大的元素,与第二个交换位置 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 #include <std

排序算法—冒泡排序算法

冒泡介绍 算法原理 算法分析 算法实现 例子 一.冒泡介绍 名称:冒泡排序: 英文:Bubble Sort 时间复杂度:O(n2) 算法稳定性:稳定排序算法: 实质:把小(大)的元素往前(后)调 #冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法. #它重复地走访过要排序的元素列,一次比较两个相邻的元素,如果他们的顺序(如从大到小.首字母从A到Z)错误就把他们交换过来.走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素已经排序完成. #这个算法的名字由来

java的八种排序算法---冒泡排序

冒泡排序是一种简单的排序算法,它重复的走访要排序的数列,两两比较相邻的元素,如果左边的大于右边就把他们交换过来,以此类推重复的排序,直到没有要排序的数列为止,这个算法的由来是因为越小的数列随着排序会慢慢的浮到数列顶端. /** * 冒泡排序 * 比较相邻的元素.如果第一个比第二个大,就交换他们两个. * 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对.在这一点,最后的元素应该会是最大的数. * 针对所有的元素重复以上的步骤,除了最后一个. * 持续每次对越来越少的元素重复上面的步骤,

排序算法--冒泡排序(一)

# 冒泡排序 冒泡排序(Bubble Sort)也是一种简单直观的排序算法.它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成.这个算法的名字由来是因为越小的元素会经由交换慢慢"浮"到数列的顶端. 作为最简单的排序算法之一,冒泡排序给我的感觉就像 Abandon 在单词书里出现的感觉一样,每次都在第一页第一位,所以最熟悉.冒泡排序还有一种优化算法,就是立一个 flag,当在一趟序列遍