冒泡排序的原理是:
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);
}
冒泡排序是最简单的排序方法,不过其实再复杂的排序方法,也是从最简单开始的,不是吗?
结束。
分享到:
相关推荐
数据结构排序算法中的冒泡排序,是我们学院学习计算机语言室接触到的第一个算法,可以说是最基础的一个排序算法
自己刚刚开始学习排序算法,第一个排序算法:冒泡排序。以及在学习过程中做的一些笔记。
数组应用及冒泡排序算法示例,适用于初学者
呵呵,传上来供大家学习使用~8种排序算法 包括:选择排序 冒泡排序 快速排序 等~~
数据结构与算法之冒泡排序pta:基于C语言的编程实践与测试 数据结构与算法之冒泡...本资源适合算法教学和学习的教师和学生使用,帮助他们通过视频和代码来观看和学习冒泡排序pta的分析和讲解,提高算法的兴趣和能力。
冒泡排序是一种简单但效率较低的排序算法,它通过比较相邻元素并交换它们的位置,逐步将最大值“冒泡”到数组的末尾。在这个教程中,我们将深入研究冒泡排序的原理,并提供一个Java示例来演示如何实现它。不管您是...
本文主要选取经典排序算法中的冒泡排序与选择排序对JavaScript编程实现算法进行简单描述与说明。 程序算法 算法说明 算法(Algorithm)是解决问题的一种策略机制,算法也是有限操作指令的集合。按照算法策略输入...
Java语言实现的冒泡排序算法,代码里头有详细注释,注释皆为简单英文,这个算法比较经典,欢迎新手下载学习使用,欢迎后期的学习交流!
冒泡排序系列PPT课件.pptx
C语言冒泡排序法PPT课件.pptx
冒泡排序(Bubble Sort) 是一种基本的排序算法,它通过多次遍历数组,比较相邻元素的大小并交换它们,从而使最大(或最小)的元素逐渐移动到数组的最后。冒泡排序的实现在Java中非常简单,通过嵌套的循环来实现相邻...
该资源提供了入门级别的C++算法练习,旨在帮助读者学习和理解冒泡排序算法。文档中包含了冒泡排序的基本原理和实现方法,并提供了详细的代码示例和解析。 通过学习和完成这个练习,读者将能够掌握冒泡排序算法的...
c++冒泡排序算法,希望对于初级者的学习提供帮助
冒泡排序是一种简单的排序算法,通过重复遍历待排序序列,比较每对相邻的元素,并在...尽管在实际应用中,由于性能问题,冒泡排序很少被用作主要的排序算法,但其简洁易懂的特点使其成为教学示例和算法学习的常用选择。
冒泡排序算法PPT课件.pptx
冒泡排序算法也是很多初学者学习排序算法的起点。 所以,总的来说,这个是一小段实用的Python代码,同时也是一个不错的学习示例。初学者可以通过阅读这段代码来了解Python的基本语法,以及理解简单排序算法的实现原理。 ...
在学习计算机科学、数据结构或算法的课程中,您可能会遇到冒泡排序算法。本资源可以帮助您深入理解这一算法的实现原理,提高您的编程技能,并加深对C语言的理解。此外,掌握冒泡排序算法对于准备参加编程竞赛或日常...
用verilog实现的冒泡排序算法,源码,可综合,无警告,有仿真,有截图,有状态机,完全可用。 非常值得大家借鉴
在众多排序算法中,冒泡排序是最基础和最简单的一种。 冒泡排序的基本思想是通过不断比较相邻元素并交换它们的位置,使得较大的元素逐渐“浮”到数组的末端。这个过程会不断重复,直到整个数组都有序为止。虽然冒泡...
本资源还提供了多个冒泡排序算法的实例和练习题,以及详细的注释和解析,让读者在动手中学习和巩固冒泡排序算法的知识和技能。 C语言冒泡排序的习题集,针对C语言冒泡排序算法的重要知识点和难点,提供了大量的练习...