[数据结构] 冒泡排序

概述

  冒泡排序通过重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来,直到没有再需要交换的元素为止(对n个项目需要O(n^2)的比较次数)。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。

实现步骤

  1. 比较相邻的元素。如果第一个比第二个大,就交换他们两个。 
  2. 对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。
  3. 针对所有的元素重复以上的步骤,除了最后一个。
  4. 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。 

  冒泡排序为一列数字进行排序的过程 

实现性能

  • 最差时间复杂度

O(n^2)

  • 最优时间复杂度

O(n) 

  • 平均时间复杂度

O(n^2)

  • 最差空间复杂度

总共O(n),需要辅助空间O(1)

Java实现

public static void main(String[] args) {
        int[] number = {95,45,15,78,84,51,24,12};
        bubble_sort(number);
        for(int i = 0; i < number.length; i++) {
            System.out.print(number[i] + " ");
            }
    }
    public static void bubble_sort(int[] arr) {
            int  temp, len = arr.length;
            for (int i = 0; i < len - 1; i++)
                for (int j = 0; j < len - 1 - i; j++)
                    if (arr[j] > arr[j + 1]) {
                        temp = arr[j];
                        arr[j] = arr[j + 1];
                        arr[j + 1] = temp;
                }
        }

参考:

https://zh.wikipedia.org/wiki/%E5%86%92%E6%B3%A1%E6%8E%92%E5%BA%8F#C.E8.AF.AD.E8.A8.80

版权声明:请尊重个人劳动成果,转载注明出处,谢谢!

http://blog.csdn.net/amazing7/article/details/51372313

时间: 2024-10-03 11:19:23

[数据结构] 冒泡排序的相关文章

java 数据结构 冒泡排序实现代码_java

冒泡(Bubble Sort)排序的基本思想是:将待排序的数组看作从上倒下排列,把关键字较小的记录看作较轻的,关键字较大的看作较重的,较小的关键字的值看作是水中的气泡向上浮,较大的关键字如水中的石块向下沉,当气泡都浮到相应的位置的时候排序结束. 算法性能分析                         (1)      时间复杂素.总的一定此次数为3/2(n-1)*n                         (2)      空间复杂度.仅用了一个辅助单元空间复杂度为O(1)    

数据结构与算法系列(2)基础排序算法

前言 在计算机中实现存储数据最普遍的两种操作就是排序和查找.这是从计算机产业初始就已经确认的 了.这意味着排序和查找也是计算机科学领域最值得研究的两种操作.本书提到的许 多数据结构的主要设计目的就是为了使排序和/或查找更加简单,同时也是为了数据在结构内的存 储更加有效. 本章会介绍有关数据排序和查找的基础算法.这些算法仅依赖数组作为数据结构,而且所采用的 "高级"编程技术只是递归.本章还介绍了用来非正式分析不同算法之间速度与效率的方 法,此方法贯穿全书. 1.排序算法 人们在日常生活中

Java数据结构及算法实例:冒泡排序 Bubble Sort_java

/** * 冒泡排序估计是每本算法书籍都会提到的排序方法. * 它的基本思路是对长度为N的序列,用N趟来将其排成有序序列. * 第1趟将最大的元素排在序列尾部,第2趟将第2大的元素排在倒数第二的位置, * 即每次把未排好的最大元素冒泡到序列最后端. * 该排序方法实际上分为两重循环,外层循环:待排元素从数组的第1个元素开始. * 内层循环:待排元素从数组的第1个元素开始,直到数组尾端未排过的元素. * 在内循环中,如果遇到前面元素比其后的元素大就交换这两个元素的位置. * 由此可见冒泡排序的复杂

数据结构C#实例教程:冒泡排序算法

  由于这本书我发现的错误较多,感觉质量不是很好,所以大家在看的时候一定要注意.好了,我们继续这个系列,今天主要是将排序算法中最简单的冒泡排序.所谓冒泡排序就是在每一次排序的过程中总有一个最大的值被移动到后面,值小的就像水泡一样浮到水面.下面我们就看一下代码,重要的地方都有注释,大家可以看注释. 1 class SortingAlgorithms 2 { 3 private int[] arr; 4 private int upper; 5 private int numElement; 6 7

PHP 数据结构 算法描述 冒泡排序 bubble sort_php技巧

复制代码 代码如下: <?php /** * 冒泡排序 bubble sort * * 原理:多次循环进行比较,每次比较时将最大数移动到最上面.每次循环时,找出剩余变量里的最大值,然后减小查询范围.这样经过多次循环以后,就完成了对这个数组的排序 */ function sort_bubble($list) { $len = count($list); if(empty($len)) return $list; for($i = 0;$i < $len; $i++) { for($j = $i

c/c++ 数据结构和算法-选择排序/冒泡排序

冒泡排序 #include <stdio.h> void BubbleSort(int *a,int n);   int main(void) {     int k;     int a[10]={2,4,6,8,0,1,3,5,7,9};     for(k=0;k<10;k++)     {       if(k==9)           printf("%d\n",a[k]);       else           printf("%d,&qu

C++ 冒泡排序数据结构、算法及改进算法_C 语言

程序代码如下: 复制代码 代码如下: // BubbleSort.cpp : 定义控制台应用程序的入口点.//#include "stdafx.h"#include <cmath>#include <iostream>using namespace std;#define  MAXNUM 20template<typename T>void Swap(T& a, T& b){    int t = a;    a = b;    b

基本数据结构和算法在Linux内核中使用

基本数据结构和算法在Linux内核中使用 gaufunga day ago 搬运工 Linux内核(源代码的链接在github). 1.链表.双向链表.无锁链表. 2.B+ 树,这是一些你无法在教科书上找到的说明. 一个相对简单的B+树的实现.我把它作为一个学习练习来帮助理解B+树是如何工作的.这同样也被证明是有用的. ... 一个在教科书中并不常见的技巧.最小的值在右侧而不是在左侧.所有在一个节点里用到的槽都在左侧,所有没有用到的槽包含了空值(NUL).大多数操作只简单地遍历所有的槽一次并在第

数据结构和字符串处理代码整理

数据|数据结构|字符串 整理一下以前写的部分算法和字符串处理函数,东西没有什么用,只是为了学习而已. Author: heiyelurenBlog: http://blog.csdn.net/heiyeshuwuDate: 2006-06-10 23:50 <? //-------------------- // 基本数据结构算法//-------------------- //二分查找(数组里查找某个元素) function bin_sch($array, $low, $high, $k){