数据结构<一> 排序算法之冒泡排序
2017-10-17 18:16
337 查看
冒泡排序可以说是最简单,大多数人最先接触的排序算法。临近的数字两两进行比较,按照规定的顺序进行交换,,这样一趟过去后,最大或最小的数字就像气泡一样被‘排’最后一位,然后第二趟之后,次大或次小的数字被‘排’到倒数第二位,以此类推,直至第一位与第二位顺序正确。
实现过程如图:
![](https://img-blog.csdn.net/20171017194902089?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZGFsYV9kYQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
冒泡排序复杂度为O(n²),代码过程如下:
运行结果:
![](https://img-blog.csdn.net/20171017193329950?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZGFsYV9kYQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
稳定性:
如上图所示,待排序数列中有3个2,为分辨每个2的身份,定义结构体时,赋一个字符以示差别,三个2输入的顺序,身份分别为qet,经过排序后,其身份并未被打乱,因此冒泡排序是稳定的,本例可以将结构体数组容量加大,更具有说服力~
算法改良:
假如待排序序列为1、2、3、4、5,可能Swap函数根本一次也没被调用,造成资源浪费,所以冒泡排序可以进行改进,改进后时间复杂度最小为O(n)
实现过程如图:
冒泡排序复杂度为O(n²),代码过程如下:
#include<iostream> #define SIZE 5 using namespace std; typedef struct{ int text_num; char text_char; }TEXT; void Swap(TEXT *b, int p, int q){ TEXT temp; temp.text_num=b[p].text_num; b[p].text_num=b[q].text_num; b[q].text_num=temp.text_num; temp.text_char=b[p].text_char; b[p].text_char=b[q].text_char; b[q].text_char=temp.text_char; } void Bubble_Sort(TEXT *a){ for(int i=0;i<SIZE-1;i++){ for(int j=0;j<SIZE-i-1;j++){ if(a[j].text_num>a[j+1].text_num){ Swap(a,j,j+1); } } } } void show(TEXT *a){ cout << "排序后的数字及字符为:" << endl; for(int i=0;i<SIZE;i++){ cout << a[i].text_num << " " << a[i].text_char << endl; } } int main(){ TEXT text[SIZE]; cout << "请输入数字及字符,输入格式为\"数字 字符\",输入后请回车" << endl; for(int i=0;i<SIZE;i++){ cin >> text[i].text_num >> text[i].text_char; } Bubble_Sort(text); show(text); return 0; }
运行结果:
稳定性:
如上图所示,待排序数列中有3个2,为分辨每个2的身份,定义结构体时,赋一个字符以示差别,三个2输入的顺序,身份分别为qet,经过排序后,其身份并未被打乱,因此冒泡排序是稳定的,本例可以将结构体数组容量加大,更具有说服力~
算法改良:
假如待排序序列为1、2、3、4、5,可能Swap函数根本一次也没被调用,造成资源浪费,所以冒泡排序可以进行改进,改进后时间复杂度最小为O(n)
void Bubble_Sort(TEXT *a){ for(int i=0;i<SIZE-1;i++){ int change=0; for(int j=0;j<SIZE-i-1;j++){ if(a[j].text_num>a[j+1].text_num){ Swap(a,j,j+1); change=1; } } if(!change) break; } }
相关文章推荐
- 数据结构<一> 排序算法之快速排序
- 数据结构<一>: 概述
- 排序算法 ->冒泡排序
- 排序算法就是那么回事儿<一>
- 排序算法就是那么回事儿<一>
- 排序算法-->直接排序,冒泡排序,快速排序
- 数据结构<一>链表
- 机器学习入门指引<一>
- 高质量c/c++编程笔记<一>
- 智能储物柜/快递柜系统解析<一>
- Cocos2d-X内存管理研究<一>
- Spring学习笔记<一>
- Qt中Signal与Slot参数问题<一>
- <每日一算法>冒泡排序
- node.js 学习<一>
- memcached使用总结篇<一>
- 排序算法——冒泡排序
- mysql+heartbeat+DRBD+LVS实现mysql高可用<一>
- 【Dialer】android6.0拨号界面分析<一>
- Java基础<一>