原理:
将被排序的记录数组R[1..n]垂直排列,每个记录R[i]看作是重量为R[i].key的气泡。根据轻气泡不能在重气泡之下的原则,从下往上扫描数组R:凡扫描到违反本原则的轻气泡,就使其向上"飘浮"。如此反复进行,直到最后任何两个气泡都是轻者在上,重者在下为止
实现:
private static void swap(int[] array, int i, int j)
{
int temp = array[i];
array[i] = array[j];
array[j] = temp;
}
public static void bubbleSort(int[] array)
{
int n = array.length;
boolean swaped = false;
for(int i = n - 1; i > 0; i--)
{
swaped = false;
for(int j = 0 ; j < i; j++)
if( array[j] > array[j + 1] )
{
swap(array, j, j + 1);
swaped = true;
}
if (!swaped)
break;
}
}
算法复杂度分析:
初始文件状态
|
正序
|
反序
|
无序
|
第i趟比较次数
|
n – i
|
n - i
|
n - i
|
总关键字比较次数
|
n -1
|
n2 /2
|
n2 /2
|
第i趟移动次数
|
0
|
n - i
|
(n – i) / 2
|
总关键字移动次数
|
0
|
n2 /2
|
n2 /4
|
时间复杂度
|
O(n)
|
O(n2)
|
O(n2)
|
稳定性:
冒泡排序为稳定排序
算法改进:
增加一个lastExchanged标识位,标记一趟排序后最后一个发生交换的位置,则该位置往后都有序,不用在冒泡
public static void bubbleSort(int[] array)
{
int n = array.length;
boolean swaped = false;
int lastExchanged = n - 1;
int i = n - 1;
int count = 0;
while( i > 0 )
{
swaped = false;
for(int j = 0 ; j < i; j++)
{
if( array[j] > array[j + 1] )
{
swap(array, j, j + 1);
lastExchanged = j;
swaped = true;
}
count++;
}
if (!swaped)
break;
i = lastExchanged;
}
System.out.println(count);
}
实验结果,需要移动比较次数明显减少
相关推荐
### 冒泡排序详解 #### 一、冒泡排序的基本概念与原理 冒泡排序是一种简单的排序算法,其基本思想是通过重复地遍历要排序的列表,比较相邻的两个元素,如果它们的顺序错误就把它们交换过来。遍历列表的工作是重复...
排序-按键精灵-冒泡排序
MIPS-汇编语言-冒泡排序-含伪代码以及完整注释,可以直接使用
冒泡排序 冒泡排序 冒泡排序 冒泡排序 冒泡排序
本主题将详细探讨四种常见的排序算法:选择排序、插入排序、快速排序以及冒泡排序,它们都是用C语言实现的。以下是这些排序算法的详细解析: 1. **选择排序(Selection Sort)** - 选择排序是一种简单直观的排序...
--C++冒泡排序--
**冒泡排序法详解** 冒泡排序是一种简单直观的排序算法,它重复地遍历待排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。遍历数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经...
本资源包含三个经典的排序算法的源代码:插入排序、选择排序和冒泡排序,这些都是初级到中级程序员常学习和使用的算法。下面将详细介绍这三个排序算法的工作原理、特点以及代码实现。 1. **插入排序(Insertion ...
### 数据结构:交换排序-冒泡排序实验指导 #### 实验背景与目标 在计算机科学领域,数据结构和算法是核心研究对象,其中排序算法作为基础且重要的算法之一,广泛应用于各类数据处理场景。本实验旨在深入理解并掌握...
《S7-200SMART PLC程序实现冒泡排序的优化与多样性》 在工业自动化领域,西门子S7-200SMART系列PLC因其小巧、灵活、功能强大而广泛应用于各种控制系统中。本篇文章将深入探讨如何在S7-200SMART PLC上实现冒泡排序...
冒泡排序是一种基础且经典的排序算法,它的基本思想是通过不断地交换相邻的逆序元素,使得每一轮排序后,最大的元素“浮”到数组的末尾。这个过程就像水底下的气泡逐渐升至水面一样,因此得名“冒泡排序”。 在Java...
冒泡排序是一种基础且历史悠久的排序算法,它通过重复遍历待排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来,直到没有再需要交换的元素,即整个数列完成排序。这个过程就像水底下的气泡一样逐渐...
交换排序 选择排序 冒泡排序 插入排序
在这个"冒泡排序-14-表单提交.ev4.rar"压缩包中,很可能包含了一个关于冒泡排序的示例讲解,可能是一个教学视频"冒泡排序-14-表单提交.ev4.mp4"。 冒泡排序的基本思想是通过重复遍历待排序的数列,一次比较两个元素...
### 冒泡排序(Bubble Sort) #### 定义与原理 冒泡排序是一种简单的排序算法,它重复地遍历待排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。遍历数列的工作是重复进行的,直到没有再需要...
在本文中,我们将深入探讨TIA博途中的冒泡排序SCL算法以及如何在全局FC(功能块)库文件中实现这一算法。TIA博途是西门子的一款集成自动化软件,广泛应用于PLC(可编程逻辑控制器)编程,而SCL是一种高级编程语言,...
冒泡排序是一种基础且经典的排序算法,它的基本思想是通过不断地交换相邻的逆序元素,使得每一趟排序后,最大的元素“浮”到数组的末尾。在这个过程中,就像水底下的气泡逐渐上浮一样,因此得名“冒泡排序”。在...
Java代码-排序-直接插入排序、希尔排序、直接选择排序、冒泡排序、堆排序、快速排序、归并排序中部分排序以及算法-贪心法,大家可以将源码下载下来进行学习,附带着注释和解释,有不理解的可以找博主一起探讨,共同...
标题中的“python冒泡排序-16-集合总结”表明这是一个关于Python编程的教程,具体聚焦于冒泡排序算法和集合的综合应用。冒泡排序是计算机科学中最基础的排序算法之一,而集合在Python中则是一种无序、不重复元素序列...