【Algorithm】冒泡排序
一. 算法描述
冒泡排序思想:依次比较相邻的数据,将小数据放在前,大数据放在后;即第一趟先比较第1个和第2个数,大数在后,小数在前,再比较第2个数与第3个数,大数在后,小数在前,以此类推则将最大的数"滚动"到最后一个位置;第二趟则将次大的数滚动到倒数第二个位置......第n-1(n为无序数据的个数)趟即能完成排序。
举个例子:5 7 9 3 6 2 8
第一趟: 5 7 9 3 6 2 8 第二趟:5 7 3 6 2 8 9 第三趟:3 5 6 2 7 8 9
5 7 9 3 6 2 8 5 3 7 6 2 8 9 ........
5 7 3 9 6 2 8 5 3 6 7 2 8 9
5 7 3 6 9 2 8 5 3 6 2 7 8 9
5 7 3 6 2 9 8 5 3 6 2 7 8 9
5 7 3 6 2 8 9
二. 算法实现
#include<stdio.h> /*
* author:Knife
* time:2014.06.12 20:56
*/
void main_bubbleSort1(){
int intArr[] = {,,,,,,,,,};
int n = sizeof(intArr)/sizeof(intArr[]); // 计算整型数组的长度
int i,j,tmp;
//冒泡排序
for(i = ; i < n; i++){
for(j = ; j<n-i-; j++){
if(intArr[j]>intArr[j+]){
tmp = intArr[j+];
intArr[j+] = intArr[j];
intArr[j] = tmp;
}
}
}
//输出
for(i = ; i < n; i++){
printf("%d ",intArr[i]);
}
printf("\n");
}
三. 算法分析
- 平均时间复杂度:O(n^2)
- 空间复杂度:O(1) (用于交换)
- 稳定性:稳定
四. 算法优化
优化思路:还可以对冒泡排序算法进行简单的优化,用一个标记来记录在一趟的比较过程中是否存在交换,如果不存在交换则整个数组已经有序退出排序过程,反之则继续进行下一趟的比较。
#include<stdio.h> void main(){
void DataSwap(int* data1, int* data2);
void BubbleSort(int* pDataArray, int iDataNum); int intArr[] = {,,,,,,,,,};
int n = sizeof(intArr)/sizeof(intArr[]); // 计算整型数组的长度 BubbleSort(intArr, n); //输出
for(int i = ; i < n; i++){
printf("%d ",intArr[i]);
}
printf("\n");
} //交换data1和data2所指向的整形
void DataSwap(int* data1, int* data2)
{
int temp = *data1;
*data1 = *data2;
*data2 = temp;
} /********************************************************
*函数名称:BubbleSort
*参数说明:pDataArray 无序数组;
* iDataNum为无序数据个数
*说明: 冒泡排序
*********************************************************/
void BubbleSort(int* pDataArray, int iDataNum)
{
bool flag = false; //记录是否存在交换
for (int i = ; i < iDataNum - ; i++){ //走iDataNum-1趟
flag = false;
for (int j = ; j < iDataNum - i - ; j++){
if (pDataArray[j] > pDataArray[j + ]){
flag = true;
DataSwap(&pDataArray[j], &pDataArray[j + ]);
}
}
if (!flag){ //上一趟比较中不存在交换,则退出排序
break;
}
}
}
参考资料
[1] http://blog.csdn.net/cjf_iceking/article/details/7911027
【Algorithm】冒泡排序的更多相关文章
- 常见的排序算法之Java代码解释
一 简要介绍 一般排序均值的是将一个已经无序的序列数据重新排列成有序的 常见的排序分为: 1 插入类排序 主要就是对于一个已经有序的序列中,插入一个新的记录.它包括:直接插入排序,折半插入排序和希尔排 ...
- Go语言排序算法实现
// Algorithm project Algorithm.go package Algorithm // 冒泡排序 func BubbleSort(a []int) { n := len(a) ; ...
- 排序算法 (sorting algorithm)之 冒泡排序(bubble sort)
http://www.algolist.net/Algorithms/ https://docs.oracle.com/javase/tutorial/collections/algorithms/ ...
- 数据结构(DataStructure)与算法(Algorithm)、STL应用
catalogue . 引论 . 数据结构的概念 . 逻辑结构实例 2.1 堆栈 2.2 队列 2.3 树形结构 二叉树 . 物理结构实例 3.1 链表 单向线性链表 单向循环链表 双向线性链表 双向 ...
- HDU 5775 Bubble Sort(冒泡排序)
p.MsoNormal { margin: 0pt; margin-bottom: .0001pt; text-align: justify; font-family: Calibri; font-s ...
- python-Day5-深入正则表达式--冒泡排序-时间复杂度 --常用模块学习:自定义模块--random模块:随机验证码--time & datetime模块
正则表达式 语法: mport re #导入模块名 p = re.compile("^[0-9]") #生成要匹配的正则对象 , ^代表从开头匹配,[0 ...
- 冒泡排序最佳情况的时间复杂度,为什么是O(n)
冒泡排序最佳情况的时间复杂度,为什么是O(n) 我在许多书本上看到冒泡排序的最佳时间复杂度是O(n),即是在序列本来就是正序的情况下. 但我一直不明白这是怎么算出来的,因此通过阅读<算法导论-第 ...
- python算法之冒泡排序和选择排序
一.冒泡排序(Bubble sort) Bubble sort, sometimes referred to as sinking sort, is a simple sorting algorith ...
- 排序算法之冒泡排序的思想以及Java实现
1 基本思想 设排序表长为n,从后向前或者从前向后两两比较相邻元素的值,如果两者的相对次序不对(A[i-1] > A[i]),则交换它们,其结果是将最小的元素交换到待排序序列的第一个位置,我们称 ...
随机推荐
- 如何获取当前应用程序所用的OpenGL ES的版本
如何获取当前应用程序所用的OpenGL ES的版本? [答案] char* glVersion = (char*)glGetString(GL_VERSION); LOGW(&qu ...
- js获取对象值的方式
js获取对象值的方式 var obj = {abc:"ss",nn:90}; var v1 = obj.abc;//使用点的方式 var v2 = obj["abc&qu ...
- mysql查询结果单位换算后小数位数的保留方式
1.调用mysql自带的格式化小数函数format(x,d) 例如: select format(23456.789,2); select formate(salary,2); 输出: 23,45 ...
- iOS编程(双语版)-视图-Autolayout代码初步
一谈到Autolayout,初学者肯定想到的是IB中使用拖拽啊,pin啊各种鼠标操作来进行添加各种约束. 今天我们要聊得是如何利用代码来添加视图间的约束. 我们来看一个例子: (Objective-C ...
- poj2689 Prime Distance 有难度 埃拉托斯尼斯筛法的运用
我承认这道很难(对我来说),搞脑子啊,搞了好久,数论刚开始没多久,还不是很强大,思路有点死,主要是我 天赋太差,太菜了,希望多做做有所改善 开始解析: 首先要将在 [ l,u]内的所有素数找出来,还好 ...
- OpenGL 核心技术之立方体贴图
笔者介绍:姜雪伟,IT公司技术合伙人,IT高级讲师,CSDN社区专家.特邀编辑,畅销书作者,国家专利发明人;已出版书籍:<手把手教你架构3D游戏引擎>电子工业出版社和<Unity3D ...
- Grunt、Gulp和Webpack对比
1.Grunt处理Sass转换成CSS过程 2.Gulp处理Sass转换成CSS过程 3.Webpack执行原理 4.区别 (1)grunt和gulp都类似于webapck的中的scripts,属于任 ...
- 一个简单的ExtJS搜索建议框
封装的是一个Ext4.2的组件,继承并兼容于Ext的ComboBox. 实现原理非常easy,在 combo 中监听 keyup 事件就可以. 搜索建议的Combo.基本上全然兼容, 使用方式与Com ...
- 【shell】定时删除DB2表数据
使用db2的时候,有时候需要对表数据进行删除,防止数据太多,造成数据库空间满了 以下是一个定时删除表tmp,tm1中id为1的数据的脚本 #!/bin/sh ##------------------- ...
- layer.js 弹窗组件API文档
基础参数 type title content skin area offset icon btn closeBtn shade shadeClose time id shift maxmin f ...