这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端,故名。
算法原理
冒泡排序算法的运作如下:(从后往前)
1. 比较相邻的元素。如果第一个比第二个大,就交换他们两个。
2. 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
3. 针对所有的元素重复以上的步骤,除了最后一个。
4. 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
时间复杂度
算法稳定性
冒泡排序就是把小的元素往前调或者把大的元素往后调。比较是相邻的两个元素比较,交换也发生在这两个元素之间。所以,如果两个元素相等,我想你是不会再无聊地把他们俩交换一下的;如果两个相等的元素没有相邻,那么即使通过前面的两两交换把两个相邻起来,这时候也不会交换,所以相同元素的前后顺序并没有改变,所以冒泡排序是一种稳定排序算法。
算法实现:
设数组长度为N。
1.比较相邻的前后二个数据,如果前面数据大于后面的数据,就将二个数据交换。
2.这样对数组的第0个数据到N-1个数据进行一次遍历后,最大的一个数据就“沉”到数组第N-1个位置。
3.N=N-1,如果N不为0就重复前面二步,否则排序完成。
public class BubbleSort { public static void main(String[] args) { int a[] = new int[]{1, 7, 9, 3, 5, 8, 6, 10, 6}; System.out.print("Before sort: "); for (int i : a) { System.out.print(i + " "); } sort(a); System.out.print("\nAfter sort: "); for (int i : a) { System.out.print(i + " "); } } private static void sort(int arr[]) { for (int i=0; i< arr.length; i++) { for (int j =0; j < arr.length - i -1; j++) { if (arr[j] > arr[j+1]) { int temp = arr[j]; arr[j] = arr[j+1]; arr[j+1] = temp; } } //输出每一步的结果 System.out.println(); for (int t : arr) { System.out.print(t + " "); } } } }
结果:
Before sort: 1 7 9 3 5 8 6 10 6 1 7 3 5 8 6 9 6 10 1 3 5 7 6 8 6 9 10 1 3 5 6 7 6 8 9 10 1 3 5 6 6 7 8 9 10 1 3 5 6 6 7 8 9 10 1 3 5 6 6 7 8 9 10 1 3 5 6 6 7 8 9 10 1 3 5 6 6 7 8 9 10 1 3 5 6 6 7 8 9 10 After sort: 1 3 5 6 6 7 8 9 10
冒泡排序动画演示:http://www.tyut.edu.cn/kecheng1/site01/suanfayanshi/MaoPao.asp
相关推荐
冒泡排序是一种简单直观的排序算法,它重复地遍历待排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。遍历数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的...
冒泡排序是一种基础且经典的排序算法,它的基本思想是通过不断地交换相邻的逆序元素,使得每一轮排序后,最大的元素“浮”到数组的末尾。这个过程就像水底下的气泡逐渐升至水面一样,因此得名“冒泡排序”。 在Java...
本篇文章主要探讨了如何在VC++环境中利用多线程技术来实现三种经典的排序算法:冒泡排序、快速排序和归并排序,并对它们的性能进行了比较。 首先,冒泡排序是一种简单的排序算法,它重复地遍历待排序的数列,一次...
Python算法之---冒泡,选择,插入排序算法.py
本篇文章将详细讨论几种常见的排序算法:选择排序、冒泡排序、插入排序、合并排序以及快速排序,分析它们的算法原理、时间效率,并通过经验分析验证理论分析的准确性。 **1. 选择排序(Selection Sort)** 选择排序...
冒泡排序是一种简单的排序算法,它重复地遍历待排序的列表,比较每对相邻元素,如果它们的顺序错误就把它们交换过来。遍历列表的工作是重复进行直到没有再需要交换,也就是说该列表已经排序完成。这个算法的名字由来...
一种简单的的排序方式---冒泡排序,本资源为其源代码
冒泡排序是一种基础且经典的计算机科学排序算法,尤其在C++编程中常见。它通过不断地比较相邻元素并根据需要进行交换,逐步将较大的元素“冒泡”到序列的末尾,从而实现升序排列。这一过程可以理解为一个逐层推进的...
Java排序算法之冒泡排序详解 冒泡排序(Bubble Sort)是一种简单的排序算法,它重复地遍历要排序的数列,一次比较两个元素,如果它们的顺序错误就交换位置。这个过程持续对数列的末尾进行,直到整个数列都排序完成...
排序算法:排序算法汇总--各类排序算法 冒泡,选择,插入,快排,归并,堆排
内容概要:文章详细介绍了冒泡排序的基本原理、...阅读建议:重点关注冒泡排序的基本原理和实现步骤,结合代码实例进行练习,同时思考其性能特点和改进方法,有助于加深理解并为进一步学习更复杂的排序算法打下基础。
冒泡排序的时间复杂度同样为O(n²),并且在最好情况下(即数据已经有序)只需进行n-1次比较即可完成排序。 这些排序算法各有优缺点,适用于不同的场景。在实际应用中,通常会选择时间复杂度更低的排序算法,如快速...
冒泡排序是一种简单的排序算法,通过重复遍历列表,比较每对相邻元素,并在需要时交换它们的位置。这个过程会重复进行,直到没有更多的交换需要进行。 代码的执行流程如下: 1.l0 是一个包含整数的列表 [10, 50, ...
1.冒泡排序算法 冒泡排序算法是一种简单的排序算法,它的工作原理是通过不断地比较相邻元素,并交换它们以达到排序的目的。冒泡排序算法的时间复杂度为O(n^2),因此它适合小规模的数据排序。 2.选择排序算法 选择...
经典排序算法 - 冒泡排序Bubble sort 经典排序算法 - 选择排序Selection sort 经典排序算法 - 鸡尾酒排序Cocktail sort 经典排序算法 - 希尔排序Shell sort 经典排序算法 - 堆排序Heap sort序 经典排序算法 - ...
内容概要:本文详细介绍了一种经典的简单排序算法——冒泡排序。首先解释了冒泡排序的基本概念及其命名来源,然后逐步介绍了具体的算法流程,包括比较、交换、缩小范围三个主要操作阶段。同时展示了实际代码例子及其...
冒泡排序(Bubble Sort)是一种简单的排序算法,其工作原理是通过重复地遍历待排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。遍历数列的工作是重复地进行直到没有再需要交换,也就是说该数列...
各类排序算法整理--C语言描述--本人编写 排序算法种类有: 冒泡 快速排序 堆排序 希尔排序 插入排序 选择排序 二路归并排序
将杂乱无章的数据元素,通过一定的方法按关键字顺序排列的过程叫做排序。...本资源通过matlab实现合并排序、简单选择排序、快速排序、冒泡排序、直接插入排序5种常用的排序算法,并部分绘制代表算法原理的动图。
本主题将详细探讨四种常见的排序算法:选择排序、插入排序、快速排序以及冒泡排序,它们都是用C语言实现的。以下是这些排序算法的详细解析: 1. **选择排序(Selection Sort)** - 选择排序是一种简单直观的排序...