数据结构 冒泡排序文字与图示详解及冒泡编程例子
来源:互联网 发布:怎样复制淘宝图片 编辑:程序博客网 时间:2024/06/10 18:22
冒泡排序可以对一组数据进行从小到大或者从大到小进行排序
下面对数据从小到大的冒泡排序进行介绍:
图示:
小的数值在左面,大的数值在右面,就像水中冒泡一样,越来越大。
以4个数值5,3,6,2进行排序为例介绍
进行第一次排序
首先将第一个数值与第二个数值进行比较,第一个数值为5,第二个数值为3,5>3,将5与3的位置交换,此时为3,5,6,2。然后进行第二个数值与第三个数值进行比较,此时第二个数值为5,第三个数值为6, 5<6,所以位置不用交换,此时为3,5,6,2.最后进行第三个数值与第四个数值的比较,第三个数值为6,第四个数值为2, 6>2,所以讲6和2的位置交换,此时为3,5,2,6。所以第一次排序找出了这组数据的最大值6。第一次排序结果:
进行第二次排序:
首先将第一个数值与第二个数值进行比较,第一个数值为3,第二个数值为5,3<5,所以不进行位置交换。此时为3,5,2,6。进行第二个数值为第三个数值进行比较,第二个数值为5,第二个数值为2, 5>2,所以进行位置交换。此时为3,2,5,6。因为6已确定是最大值,所以5与6不用进行比较,5可以确定为次最大值。第二次排序结果:
进行第三次排序:
将第一个数值与第二个数值进行比较,第一个数值为3,第二个数值为2,3>2,所以进行位置交换,此时为2,3,5,6。3与5不用进行比较,因为5已经被确定为次最大值。所以第三次排序结果为:
总结:1 若有n个数值,需要n-1次排序。此例中有4个数值,进行了3次排序。
2 在第m次排序中,需要进行n-m次数值比较。例如此例中第一个排序需要进行4-1=3次数值比较。
下面为冒泡排序的程序,随机产生20个数值,然后对其20个数值进行排序。
#include <stdio.h>#include <time.h>//冒泡排序void BubbleSort(int *pData, int count){ int temp, i, j; for(i = 0; i < count-1; i++) //需要进行排序的次数 { for(j = 0; j < count-1-i; j++) //每次排序需要进行比较的次数 { if(pData[j] > pData[j+1]) //进行数值交换 { temp = pData[j]; pData[j] = pData[j+1]; pData[j+1] = temp; } } } }int main(){ time_t timep; srand((int)time(&timep)); int i; int Data[20] = {0}; for(i = 0; i < 20; i++) { Data[i] = rand()%100+1; } BubbleSort(Data, 20); //调用函数进行排序 for(i = 0; i < 20; i++) //打印排序好的数字 { printf("%d ", Data[i]); } printf("\n"); return 0;}
运行结果:
- 数据结构 冒泡排序文字与图示详解及冒泡编程例子
- 数据结构 - 冒泡排序法详解
- 【数据结构与算法】冒泡排序
- 数据结构与算法-冒泡排序
- 数据结构与算法-----冒泡排序
- python 与数据结构--冒泡排序
- 【数据结构与算法】冒泡排序
- 【数据结构与算法】冒泡排序
- 数据结构排序--冒泡与选择
- 数据结构 - 冒泡排序(Bubble Sort) 详解 及 代码(C++)
- 数据结构-冒泡排序与选择排序
- PHP数据结构(2)冒泡排序及变种
- 冒泡排序小例子
- 冒泡排序小例子
- 例子说冒泡排序
- java(冒泡排序例子)
- 简单冒泡排序例子
- 冒泡排序 Java数据结构与算法
- TCP和UDP
- caffe随记(九)---利用FCN和已有的model进行图像语义分割
- 临时和永久修改linux的hostname主机名
- 【C#学习】class 和 struct 对比
- selenium2java通过请求接口获取并向浏览器插入cookies
- 数据结构 冒泡排序文字与图示详解及冒泡编程例子
- C# GC 垃圾回收
- 8.24--练习赛B题--Bad Hair Day(单调队列)
- 常用 HTML 字符集
- 线性SVM与软间隔最大化
- Git基本操作(一)
- ZXing改横屏识别为竖屏识别
- ES6 module
- 使用Hutool处理RSA等非对称加密