几个基础算法介绍和实现——冒泡排序
来源:互联网 发布:域名紧急升级 编辑:程序博客网 时间:2024/06/03 20:26
冒泡排序
看名字就很熟悉很形象,接触到的第一次排序算法就是冒泡算法
冒泡排序法算法描述
依次比较相邻二个数据,如果前面数据大于后面的数据就将二个数据交换。
对长度为N的组数,从第0个遍历到第N-1个,此时最大的一个数据就“沉”到数组第N-1个位置
N=N-1,重复第二个步骤,知道N=1结束
冒泡实现void Sort::BubbleSort(int type, int (&a)[10], int n){ int i, j; bool flag; int position; switch (type){ case 1://基础冒泡 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]); } } break; case 2://改进冒泡(如果有一趟冒泡循环中没有交换动作发生,则认为排序完成) i = n; flag = true; while (flag) { flag = false; for (j = 1; j < i; j++) { if (a[j - 1] > a[j]) { swap(a[j - 1], a[j]); flag = true; } } i--; } break; case 3://改进冒泡(记录上次冒泡后最后发生排序的位置,在此位置后的元素已经有序,然后只要对该位置以前的元素排序) position = n; while (position > 0) { i = position; position = 0; for (j = 1; j < i; j++) { if (a[j - 1] > a[j]) { swap(a[j - 1], a[j]); position = j; } } } break; default: break; }}int main(void){ Sort m_sort; int a[10] = { 34, 8, 64, 51, 32, 21, 99, 108, 54, 33 }; m_sort.BubbleSort(3,a,10);//通过调整第一个参数的值来调用冒泡排序方法中的分支 for (int i = 0; i < 10; i++) { cout << a[i] <<endl; } system("pause"); return EXIT_SUCCESS;}
在代码中我实现了基础冒泡排序和两种优化的冒泡排序,在主函数中通过传入不同的type值进行调用,注意在使用swap()函数时要包含C++ 的头文件,或者自己实现一个简单的交换即可。
总的来说冒泡排序是最基础的排序,要掌握熟练,冒泡排序是稳定排序,平均时间复杂度是O(n2),适用于数据量较小的情况下
阅读全文
0 0
- 几个基础算法介绍和实现——冒泡排序
- 几个基础算法介绍和实现——插入排序
- 几个基础算法介绍和实现——选择排序
- 几个基础算法介绍和实现——希尔排序
- 几个基础算法介绍和实现——基本概念
- 算法基础2—冒泡排序和选择排序
- 基础算法 —— 冒泡排序算法
- 黑马程序员——java基础排序算法:选择排序、冒泡排序和插入排序
- *《java基础算法——冒泡排序》
- 算法基础——冒泡排序
- 基础算法——冒泡排序
- 直接选择排序算法和冒泡排序算法的介绍及实现
- 【Java基础】冒泡排序算法原理+实现
- 排序算法——java实现(1):冒泡排序算法
- 排序算法—冒泡排序算法分析与实现(Python)
- 基础排序算法(一)——冒泡排序
- 【算法基础】冒泡排序
- 算法基础-冒泡排序
- 经典错误一
- 震惊!原来String类是这样的(上)
- Qin Shi Huang's National Road System
- (1) vsftpd 安装
- Java实现-编码方法
- 几个基础算法介绍和实现——冒泡排序
- PHP魔术方法之__unset()和__isset()方法
- eclipse中Web Deployment Assembly与build path作用
- CentOS 7安装mongodb
- 重新认识单元测试
- Apache Kafka —一个不同的消息系统
- (2) vsftpd 实战之虚拟用户
- LeetCode 数据库262,601整理
- 2017.07.01 没写日记