冒泡排序
来源:互联网 发布:java用户菜单权限源码 编辑:程序博客网 时间:2024/06/03 19:37
本文转自:点击打开链接
一. 算法描述
冒泡排序:依次比较相邻的数据,将小数据放在前,大数据放在后;即第一趟先比较第1个和第2个数,大数在后,小数在前,再比较第2个数与第3个数,大数在后,小数在前,以此类推则将最大的数"滚动"到最后一个位置;第二趟则将次大的数滚动到倒数第二个位置......第n-1(n为无序数据的个数)趟即能完成排序。
以下面5个无序的数据为例:
40 8 15 18 12 (文中仅细化了第一趟的比较过程)
第1趟: 8 15 18 12 40
第2趟: 8 15 12 18 40
第3趟: 8 12 15 18 40
第4趟: 8 12 15 18 40
二. 算法分析
平均时间复杂度:O(n2)
空间复杂度:O(1) (用于交换)
稳定性:稳定
三. 算法实现
- //交换data1和data2所指向的整形
- void DataSwap(int* data1, int* data2)
- {
- int temp = *data1;
- *data1 = *data2;
- *data2 = temp;
- }
- /********************************************************
- *函数名称:BubbleSort
- *参数说明:pDataArray 无序数组;
- * iDataNum为无序数据个数
- *说明: 冒泡排序
- *********************************************************/
- void BubbleSort(int* pDataArray, int iDataNum)
- {
- for (int i = 0; i < iDataNum - 1; i++) //走iDataNum-1趟
- for (int j = 0; j < iDataNum - i - 1; j++)
- if (pDataArray[j] > pDataArray[j + 1])
- DataSwap(&pDataArray[j], &pDataArray[j + 1]);
- }
四. 算法优化
还可以对冒泡排序算法进行简单的优化,用一个标记来记录在一趟的比较过程中是否存在交换,如果不存在交换则整个数组已经有序退出排序过程,反之则继续进行下一趟的比较。- /********************************************************
- *函数名称:BubbleSort
- *参数说明:pDataArray 无序数组;
- * iDataNum为无序数据个数
- *说明: 冒泡排序
- *********************************************************/
- void BubbleSort(int* pDataArray, int iDataNum)
- {
- BOOL flag = FALSE; //记录是否存在交换
- for (int i = 0; i < iDataNum - 1; i++) //走iDataNum-1趟
- {
- flag = FALSE;
- for (int j = 0; j < iDataNum - i - 1; j++)
- if (pDataArray[j] > pDataArray[j + 1])
- {
- flag = TRUE;
- DataSwap(&pDataArray[j], &pDataArray[j + 1]);
- }
- if (!flag) //上一趟比较中不存在交换,则退出排序
- break;
- }
- }
0 0
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 为什么要用属性 C# .NET中的字段与属性_2
- HDU 1398 Square Coins(母函数模板题)
- JAVA之Class类与反射总结
- Python已成美国顶尖高校中最受欢迎的入门编程语言
- ZigBee四种绑定方式在TI Z-Stack中的应用【转载】i
- 冒泡排序
- 用Maven构建基于hadoop的Mahout项目
- kali linux安装qq2013
- VS2012中,无法嵌入互操作类型“……”,请改用适用的接口的解决方法
- flex 的不定项参数实现
- 整理对Spark SQL的理解
- linux 上使用外接设备(光驱) 安装和更新库
- Trigger的执行顺序
- 常用的jQuery速查表