`
zy19982004
  • 浏览: 661902 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
博客专栏
F6f66edc-1c1a-3859-b76b-a22e740b7aa7
Hadoop学习
浏览量:251950
社区版块
存档分类
最新评论

数据结构与算法学习一:冒泡排序

 
阅读更多

一.排序方法

  1. 将被排列的数组data[0...n]垂直排列,每个元素data[i]看作是一个气泡,气泡的重量就是data[i]的值。
  2. 从最下面一个气泡data[n]开始扫描,比较其与上一个气泡data[n-1]的重量,data[n] < data[n-1]则交换;然后比较data[n-1]与data[n-1-1]...一轮下来,最轻的气泡跑到了最上面data[0]的位置。
  3. 重复2过程,让第二轻的气泡跑到data[1]的位置;再次重复...

 

二.动画演示

      http://student.zjzk.cn/course_ware/data_structure/web/flashhtml/maopaopaixu.htm

 

 

三.Java代码

 

	public static int[] bubbleSort(int[] data) {
		int temp = 0;
		for(int i=0; i < data.length -1; i++) { //每一轮
			boolean exchange = false;			//每一轮设置一个是否有元素交换的标志
			int j = data.length -1;
			for(; j > i; j--) {
				if(data[j] < data[j-1]) {     	//元素和上一个元素比较
					temp = data[j];
					data[j] = data[j-1];
					data[j-1] = temp;
					exchange = true;        	//有元素交换
				}
			}
			if(!exchange) {      				//如果一轮下来,没有元素交换,说明data已经是排好序了,无需进行下一轮
				break;
			}
		}
		return data;
	}

 

 

四.时间复杂度和稳定性

  1.  最好时间复杂度
    1. 若文件的初始状态是正序的,一趟扫描即可完成排序。所需的关键字比较次数C和记录移动次数M均达到最小值。
    2. Cmin=n-1=O(n)
    3. Mmin=0
    4. 冒泡排序最好的时间复杂度为O(n)
  2. 最坏时间复杂度
    1. 若初始文件是反序的,需要进行n-1趟排序。每趟排序要进行n-i次关键字的比较(1≤i≤n-1),且每次比较都必须移动记录三次来达到交换记录位置。在这种情况下,比较和移动次数均达到最大值。
    2. Cmax=n(n-1)/2=O(n2)
    3. Mmax=3n(n-1)/2=O(n2)
    4. 冒泡排序的最坏时间复杂度为O(n2)
  3. 平均时间复杂度
    1. O(n2)
  4. 冒泡排序是就地排序,且它是稳定的。

五.算法优化

  1. 设置exchange标志。如果不设置,Cmin=n(n-1)/2=O(n2)
1
1
分享到:
评论
1 楼 这些年 2014-06-03  
讲的不错,哪个动画杠杠的

相关推荐

    数据结构与算法冒泡排序小程序

    在这个名为"数据结构与算法冒泡排序小程序"的项目中,我们专注于通过冒泡排序方法对输入的数组进行排序。 冒泡排序的工作原理是通过不断比较相邻元素并交换位置来逐步将最大(或最小)的元素“冒泡”到数组的一端。...

    数据结构与算法之冒泡排序pta:基于C语言的编程实践与测试

    本资源适合数据结构与算法学习者和考生使用,帮助他们通过项目实践来加深对冒泡排序算法的理解和掌握,提高编程的能力和水平。 提供了多种算法演示和验证的功能,如输入和输出待排序的数据,显示冒泡排序的过程和...

    数据结构与算法(冒泡排序).ppt

    在学习冒泡排序的基础上,可以进一步探讨优化策略,例如:设置标志位来判断某趟排序是否进行了交换,如果没有交换则说明序列已经有序,可以提前结束排序;或者设计双向冒泡排序,让最大值和最小值同时在一趟排序中...

    数据结构算法与应用-C++语言描述_Sahni著

    《数据结构算法与应用-C++语言描述》这本书,由Sahni著,旨在帮助读者深入理解这些核心概念,并通过C++实践来提升技能。 本书可能涵盖了以下几个主要的知识点: 1. **基础数据结构**:包括数组、链表、栈、队列、...

    数据结构、算法与应用:C++语言描述

    《数据结构、算法与应用:C++语言描述》是一本专为计算机科学和技术领域的学生以及专业人士编写的经典教材。本书的核心目标是通过C++编程语言,深入浅出地讲解数据结构、算法及其在实际问题中的应用。以下是该书可能...

    排序算法: 冒泡排序,桶排序,计数排序,堆排序,插入排序,合并排序,快速排序,基数排序,选择排序,希尔排序 实现语言: C

    堆排序利用了堆这种数据结构,可以视为二叉树的一种特殊形式。它将数组转化为一个大顶堆或小顶堆,然后不断将堆顶元素与末尾元素交换,直到整个数组有序。其时间复杂度为O(n log n)。 5. **插入排序**: 插入排序...

    数据结构和算法的学习:一些常见的算法包括排序(如冒泡排序、快速排序等)、搜索(如二分搜索、深度优先搜索等)、图算法

    一些常见的算法包括排序(如冒泡排序、快速排序等)、搜索(如二分搜索、深度优先搜索等)、图算法(如Dijkstra算法、Prim算法等)等。在生产环境中,数据结构和算法的应用非常广泛。例如,你可能需要使用特定的数据...

    java数据结构与算法.pdf

    在编程领域,数据结构与算法是核心组成部分,它们直接影响到程序的效率和性能。Java作为广泛应用的编程语言,其在实现数据结构和算法时有着丰富的库支持和优秀的可读性。下面将对标题和描述中提到的一些关键知识点...

    JS数据结构与算法.pdf

    JS 数据结构与算法.pdf 本书主要介绍了 JavaScript 语言的基础知识,包括数据结构和算法。以下是该书的详细知识点: 一、JavaScript 基础知识 * 变量和数据类型 * 运算符和控制结构 * 函数和对象 * 数组和字符串 ...

    数据结构 课程设计 排序算法的比较

    数据结构课程设计是计算机科学教育中的重要组成部分,它涉及到如何高效地组织和处理数据,而排序算法则是数据结构中的一项基础但至关重要的内容。在这个课程设计中,我们重点关注了六种经典的内部排序算法:直接插入...

    数据结构实验-排序算法

    排序算法则是数据结构中的重要部分,它们用于对一组数据进行有序排列。在这个实验中,我们将关注六种不同的排序算法:选择排序、冒泡排序、插入排序、基数排序以及快速排序和归并排序。下面是对这些排序算法的详细...

    排序算法 数据结构 冒泡排序

    数据结构排序算法中的冒泡排序,是我们学院学习计算机语言室接触到的第一个算法,可以说是最基础的一个排序算法

    数据结构、算法与应用:C++语言描术(上).rar

    总的来说,《数据结构、算法与应用:C++语言描术》下册是一本深入学习数据结构和算法的宝贵资源,适合计算机科学专业的学生、软件工程师以及任何对算法和数据结构有需求的读者。通过本书的学习,读者将能够熟练地...

    算法-数据结构和算法-9-冒泡排序.rar

    此外,数据结构和算法的学习不仅包括排序算法,还包括查找算法、图算法、树算法等多个方面,它们是计算机科学的基础,对于理解和解决复杂问题至关重要。学习这些知识能够帮助我们编写出更加高效、优化的代码,提高...

    数据结构与算法分析--C语言描述_数据结构与算法_

    本资源"数据结构与算法分析--C语言描述"是针对数据结构初学者的一个优秀教材,旨在帮助读者快速掌握这一领域。 首先,数据结构是组织和存储数据的方式,它决定了数据的访问效率和处理速度。常见的数据结构包括数组...

    Java排序算法实现:冒泡与选择排序示例代码

    学习排序算法不仅是理解数据结构和算法的基础,也有助于提升编程能力。通过分析和实践冒泡排序和选择排序的代码,可以深入了解它们的工作原理,从而更好地选择和优化排序算法。同时,结合不同数据集运行这些示例代码...

    数据结构与算法学习资料

    总结来说,"数据结构与算法学习资料"是计算机科学的核心组成部分,涵盖了各种数据组织方式和解决问题的方法。通过深入学习,我们可以更好地理解和解决实际问题,提升编程技能,为未来的软件开发和系统设计打下坚实...

    数据结构课程冒泡排序讲义PPT学习教案.pptx

    数据结构课程冒泡排序讲义PPT学习教案 冒泡排序是数据结构中的一种简单排序算法,通过重复地遍历要排序的数列,依次...通过学习冒泡排序,我们可以掌握排序算法的基本思想和实现方法,並且能够应用于各种实际场景中。

    数据结构与算法分析–C++描述(第3版,WEISS著,含习题答案)

    《数据结构与算法分析——C++描述》是Mark Allen Weiss教授撰写的一本经典教材,针对计算机科学中的核心主题——数据结构和算法进行了深入浅出的阐述。这本书的第三版不仅涵盖了基本的数据结构如数组、链表、栈、...

Global site tag (gtag.js) - Google Analytics