话说这冒泡排序好久都没有用过了,忘得差不多了,但是由于目前的需要,只能再次重新学习了一下。
各种算法最好是用C/C++,因为执行效率高啊,在JAVA平台运行这些算法有些不适合,不过这个冒泡排序姑且用JAVA来测试一下。
下图是对它的各种复杂度的评价
最差时间复杂度
O(n2) |
最优时间复杂度
O(n) |
平均时间复杂度
O(n2) |
最差空间复杂度
O(n) total, O(1)auxiliary |
最佳算法
No |
性能分析:
若记录序列的初始状态为"正序",则冒泡排序过程只需进行一趟排序,在排序过程中只需进行n-1次交换,且不移动记录;反之,若记录序列的初始状态为"逆序",则需进行n(n-1)/2次比较和记录移动。因此冒泡排序总的时间复杂度为O(n*n)。
下面是冒泡排序的执行过程:
冒泡排序算法的运作如下:
- 比较相邻的元素。如果第一个比第二个大,就交换他们两个。
- 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
- 针对所有的元素重复以上的步骤,除了最后一个。
- 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
下面通过一个例子来查看这个算法每一轮知道最后的执行结果:
package test02;
import java.util.Arrays;
public class Test01 {
public static void main(String args[])
{
int[] a = {3,5,2,4,6};
sort(a, a.length);
System.out.println("最终结果=========================");
System.out.println(Arrays.toString(a));
}
public static void sort(int[] array,int size)
{
int i,j,temp;
for(i=0;i<size;i++)
{
for(j=0;j<size-i-1;j++)
{
if(array[j]>array[j+1])
{
temp = array[j];
array[j] = array[j+1];
array[j+1] = temp;
}
System.out.println(Arrays.toString(array));
}
System.out.println("第"+i+"次----------------------");
}
}
}
运行结果如下:
[3, 5, 2, 4, 6]
[3, 2, 5, 4, 6]
[3, 2, 4, 5, 6]
[3, 2, 4, 5, 6]
第0次----------------------
[2, 3, 4, 5, 6]
[2, 3, 4, 5, 6]
[2, 3, 4, 5, 6]
第1次----------------------
[2, 3, 4, 5, 6]
[2, 3, 4, 5, 6]
第2次----------------------
[2, 3, 4, 5, 6]
第3次----------------------
第4次----------------------
最终结果=========================
[2, 3, 4, 5, 6]
对结果的分析:
第一轮:首先3和5比较,3不大于5,所以第一次比较不动,然后5和2比较,5大于2,所以交换5和2,变成
3,2,5,4,6,然后5和4比较,5>4,交换5和4,变成:3,2,4,5,6,5再和6比较,5小于6,所以不变。这就是第一轮的执行过程,也就是每一次都会沉下一个最大的数字
第二轮:由于沉下了最大的数字6,所以剩下了2,3,4,5。在这4个数字中再次执行上述的过程,知道最后
分享到:
相关推荐
冒泡排序是一种简单直观的排序算法,它重复地遍历待排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。遍历数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的...
冒泡排序是一种基础且经典的排序算法,它的基本思想是通过不断地交换相邻的逆序元素,使得每一轮排序后,最大的元素“浮”到数组的末尾。这个过程就像水底下的气泡逐渐升至水面一样,因此得名“冒泡排序”。 在Java...
冒泡排序是一种基础且经典的计算机科学排序算法,尤其在C++编程中常见。它通过不断地比较相邻元素并根据需要进行交换,逐步将较大的元素“冒泡”到序列的末尾,从而实现升序排列。这一过程可以理解为一个逐层推进的...
冒泡排序是一种简单的排序算法,它重复地遍历待排序的列表,比较每对相邻元素,如果它们的顺序错误就把它们交换过来。遍历列表的工作是重复进行直到没有再需要交换,也就是说该列表已经排序完成。这个算法的名字由来...
Java排序算法之冒泡排序详解 冒泡排序(Bubble Sort)是一种简单的排序算法,它重复地遍历要排序的数列,一次比较两个元素,如果它们的顺序错误就交换位置。这个过程持续对数列的末尾进行,直到整个数列都排序完成...
冒泡排序算法是一种简单的排序算法,它的工作原理是通过不断地比较相邻元素,并交换它们以达到排序的目的。冒泡排序算法的时间复杂度为O(n^2),因此它适合小规模的数据排序。 2.选择排序算法 选择排序算法也是一种...
冒泡排序是一种基础且历史悠久的排序算法,它通过重复遍历待排序的序列,比较相邻元素并根据需要交换它们的位置,来逐步将序列中的大值“冒”到序列的末尾。在C#中实现冒泡排序,可以深入了解C#的基础语法、控制流...
冒泡排序是一种简单的排序算法,通过重复遍历列表,比较每对相邻元素,并在需要时交换它们的位置。这个过程会重复进行,直到没有更多的交换需要进行。 代码的执行流程如下: 1.l0 是一个包含整数的列表 [10, 50, ...
经典排序算法 - 冒泡排序Bubble sort 经典排序算法 - 选择排序Selection sort 经典排序算法 - 鸡尾酒排序Cocktail sort 经典排序算法 - 希尔排序Shell sort 经典排序算法 - 堆排序Heap sort序 经典排序算法 - ...
冒泡排序
冒泡排序(Bubble Sort)是一种简单的排序算法,其工作原理是通过重复地遍历待排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。遍历数列的工作是重复地进行直到没有再需要交换,也就是说该数列...
1. **冒泡排序**:冒泡排序是一种简单直观的排序算法,通过不断交换相邻的错误顺序元素来逐步完成排序。它重复地走访过要排序的元素,依次比较每一对相邻元素,如果它们的顺序错误就把它们交换过来。走访元素的工作...
冒泡排序是一种简单的排序算法,其基本思想是通过重复地遍历要排序的列表,比较相邻的两个元素,如果它们的顺序错误就把它们交换过来。遍历列表的工作是重复进行的,直到没有再需要交换的元素,也就是说该列表已经...
冒泡排序是一种基础且经典的排序算法,其工作原理是通过重复遍历待排序的数列,一次比较两个元素,如果他们的顺序(如从小到大、从大到小)错误就把他们交换过来。遍历数列的工作是重复地进行直到没有再需要交换,也...
此文件为数据结构中的九种排序算法,包含一些排序方法的过程,其九种排序包括:直接插入排序,折半插入排序,希尔排序,冒泡排序,快速排序,选择排序,堆排序,归并排序,基数排序!
冒泡排序(Bubble Sort)是一种基础的排序算法,适合初学者和少儿编程教学。它通过重复遍历待排序的数列,依次比较相邻元素并交换位置,使较大的元素逐渐“冒”到数列的顶端,从而实现排序。在这个项目中,我们将...
本篇文章主要探讨了如何在VC++环境中利用多线程技术来实现三种经典的排序算法:冒泡排序、快速排序和归并排序,并对它们的性能进行了比较。 首先,冒泡排序是一种简单的排序算法,它重复地遍历待排序的数列,一次...
本篇文章将详细讨论几种常见的排序算法:选择排序、冒泡排序、插入排序、合并排序以及快速排序,分析它们的算法原理、时间效率,并通过经验分析验证理论分析的准确性。 **1. 选择排序(Selection Sort)** 选择排序...
【排序算法概述】 排序算法是计算机科学中至关重要的一部分,它涉及到如何有效地重新排列一组数据,使其按照特定标准(如升序或降序)排列。排序算法的效率对程序的性能有着显著影响,尤其是在处理大量数据时。虽然...
本文将深入探讨标题和描述中提到的一些基本排序算法,包括选择排序、冒泡排序、插入排序、希尔排序、堆排序、快速排序以及归并排序,并结合C++编程语言进行讲解。 1. **选择排序(Selection Sort)** - 选择排序是一...