`
yanfaguanli
  • 浏览: 662464 次
文章分类
社区版块
存档分类
最新评论

算法学习(四)冒泡排序

 
阅读更多

冒泡排序的原理是:

1)从0开始,比较相邻两个元素的大小,如果是按从小到大排序的话,则将大的元素往后往,反之,则将小的元素往后放,这样经过一轮的比较,就会将最大或者最小的数放到数组的最后面了。

2)第二轮开始,还是从0开始,但是这一次呢,就不需要比较最后面那个元素了,因为它已经是最大了(这其实跟堆排序,找出最大数或者最小数,放到数组后端是一样的道理),假设数组长度为N,则第二轮只需要比较N-1个元素了。

3)这样,每一轮结束,都会有一个当前最大素放到最后面,那么到第N-1轮的时候,其实就只剩一个元素了,于是,排序就结束了。

其过程如下图:


其对应的代码如下:

void swap(int &a, int &b) {
	int tmp = a;
	a = b;
	b = tmp;
}

void printArray(int a[], int n) {
	for (int i = 0; i < n; i++) {
		printf("%d ", a[i]);
	}
}

void sort1(int a[], int n) {
	int i, j;
	for (i = 0; i < n; i++) {
		for (j = 1; j < n - i; j++) {
			if (a[j - 1] > a[j]) {
				swap(a[j - 1], a[j]);
			}
		}
	}
	printArray(a, n);
}

不过,我们从上面的过程图发现,在一轮的比较交换过程中,并不是每一次都会发生交换,那么就很有可能存在一种情况,参与排序的数组在某一位置后面的元素已经是有序的了,如下:


其实这就相当于老天已经先帮我们冒泡了很多轮了,所以我们就不需要再继续傻傻地再冒下去了,我们只需要记住这个位置,下一轮开始,就可以直接只冒泡前面2个元素就好了呀,对吧?嗯,对的。

代码如下:

void sort2(int a[], int n) {
	int i;
	int pos = n;
	while(pos > 0){
		i = pos;
		pos = 0;
		for (int j = 1; j < i; j++) {
			if (a[j - 1] > a[j]) {
				swap(a[j - 1], a[j]);
				pos = j;
			}
		}
	}
	printArray(a, n);
}

冒泡排序是最简单的排序方法,不过其实再复杂的排序方法,也是从最简单开始的,不是吗?

结束。

分享到:
评论

相关推荐

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

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

    学习排序算法之冒泡排序及其优化笔记.pdf

    自己刚刚开始学习排序算法,第一个排序算法:冒泡排序。以及在学习过程中做的一些笔记。

    数组应用及冒泡排序算法示例学习

    数组应用及冒泡排序算法示例,适用于初学者

    8种排序算法(选择排序 冒泡排序 快速排序等~)

    呵呵,传上来供大家学习使用~8种排序算法 包括:选择排序 冒泡排序 快速排序 等~~

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

    数据结构与算法之冒泡排序pta:基于C语言的编程实践与测试 数据结构与算法之冒泡...本资源适合算法教学和学习的教师和学生使用,帮助他们通过视频和代码来观看和学习冒泡排序pta的分析和讲解,提高算法的兴趣和能力。

    史上最清晰 - Java经典算法教程:冒泡排序

    冒泡排序是一种简单但效率较低的排序算法,它通过比较相邻元素并交换它们的位置,逐步将最大值“冒泡”到数组的末尾。在这个教程中,我们将深入研究冒泡排序的原理,并提供一个Java示例来演示如何实现它。不管您是...

    JavaScript算法学习之冒泡排序和选择排序

    本文主要选取经典排序算法中的冒泡排序与选择排序对JavaScript编程实现算法进行简单描述与说明。 程序算法 算法说明 算法(Algorithm)是解决问题的一种策略机制,算法也是有限操作指令的集合。按照算法策略输入...

    Java冒泡排序算法

    Java语言实现的冒泡排序算法,代码里头有详细注释,注释皆为简单英文,这个算法比较经典,欢迎新手下载学习使用,欢迎后期的学习交流!

    冒泡排序系列PPT课件.pptx

    冒泡排序系列PPT课件.pptx

    C语言冒泡排序法PPT课件.pptx

    C语言冒泡排序法PPT课件.pptx

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

    冒泡排序(Bubble Sort) 是一种基本的排序算法,它通过多次遍历数组,比较相邻元素的大小并交换它们,从而使最大(或最小)的元素逐渐移动到数组的最后。冒泡排序的实现在Java中非常简单,通过嵌套的循环来实现相邻...

    [C++算法入门]-冒泡排序

    该资源提供了入门级别的C++算法练习,旨在帮助读者学习和理解冒泡排序算法。文档中包含了冒泡排序的基本原理和实现方法,并提供了详细的代码示例和解析。 通过学习和完成这个练习,读者将能够掌握冒泡排序算法的...

    关于c++冒泡排序算法

    c++冒泡排序算法,希望对于初级者的学习提供帮助

    Java实现冒泡排序算法(源代码)

    冒泡排序是一种简单的排序算法,通过重复遍历待排序序列,比较每对相邻的元素,并在...尽管在实际应用中,由于性能问题,冒泡排序很少被用作主要的排序算法,但其简洁易懂的特点使其成为教学示例和算法学习的常用选择。

    冒泡排序算法PPT课件.pptx

    冒泡排序算法PPT课件.pptx

    python冒泡排序随机生成10个100以内(完美运行)

    冒泡排序算法也是很多初学者学习排序算法的起点。 所以,总的来说,这个是一小段实用的Python代码,同时也是一个不错的学习示例。初学者可以通过阅读这段代码来了解Python的基本语法,以及理解简单排序算法的实现原理。 ...

    C语言实现的冒泡排序算法

    在学习计算机科学、数据结构或算法的课程中,您可能会遇到冒泡排序算法。本资源可以帮助您深入理解这一算法的实现原理,提高您的编程技能,并加深对C语言的理解。此外,掌握冒泡排序算法对于准备参加编程竞赛或日常...

    verilog冒泡排序算法

    用verilog实现的冒泡排序算法,源码,可综合,无警告,有仿真,有截图,有状态机,完全可用。 非常值得大家借鉴

    JAVA实现的冒泡排序

    在众多排序算法中,冒泡排序是最基础和最简单的一种。 冒泡排序的基本思想是通过不断比较相邻元素并交换它们的位置,使得较大的元素逐渐“浮”到数组的末端。这个过程会不断重复,直到整个数组都有序为止。虽然冒泡...

    C语言冒泡排序算法详解:从原理到代码的完整教程

    本资源还提供了多个冒泡排序算法的实例和练习题,以及详细的注释和解析,让读者在动手中学习和巩固冒泡排序算法的知识和技能。 C语言冒泡排序的习题集,针对C语言冒泡排序算法的重要知识点和难点,提供了大量的练习...

Global site tag (gtag.js) - Google Analytics