【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[] = {8,3,6,4,2,9,5,4,1,7};int n = sizeof(intArr)/sizeof(intArr[0]); // 计算整型数组的长度int i,j,tmp;//冒泡排序for(i = 0; i < n; i++){for(j = 0; j<n-i-1; j++){if(intArr[j]>intArr[j+1]){tmp = intArr[j+1];intArr[j+1] = intArr[j];intArr[j] = tmp;}}}//输出for(i = 0; 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[] = {8,3,6,4,2,9,5,4,1,7};int n = sizeof(intArr)/sizeof(intArr[0]); // 计算整型数组的长度 BubbleSort(intArr, n);//输出for(int i = 0; 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 = 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;}} }
参考资料
[1] http://blog.csdn.net/cjf_iceking/article/details/7911027
【Algorithm】冒泡排序相关推荐
- 【基础算法】算法,从排序学起(一)
本文目录 1.导言 2.谈谈排序 2.1 何为排序?(What is sorting?) 2.2 排序的应用(Why sorting?) 2.3 常见排序算法的种类(How to sort?) 3.基 ...
- Equalizing Two Strings 冒泡排序or树状数组
首先考虑排序后相等 如果排序后相等的话就只考虑reverse长度为2的,所以a或者b排序后存在相邻两个字母相等的话就puts YES,n>26也直接puts YES 不然的话就假设c为a,b排完 ...
- 冒泡排序算法实现思想个人理解
一.冒泡排序算法个人理解 主要是以两个形成嵌套的for循环来完成的.外层的for循环以索引ix的值来逐个访问序列中的每个元素,ix的值由0开始增加到size(sequence) - 1,当外部的for ...
- 十三、冒泡排序算法及其优化
一.基本介绍 **冒泡排序(Bubble Sorting)的基本思想是:**通过对待排序序列从前向后(从下标较小的元素开始),依次比较 相邻元素的值,若发现逆序则交换,使值较大的元素逐渐从前移向后部, ...
- c语言排序教学过程,C语言中冒泡排序算法教学设计
排序是计算机科学中一项重要的技术,其应用范围广.使用频率高,因此对于排序算法的研究一直是计算机专家的重点.高校的程序设计类课程也将排序算法作为重难点进行教学. 1常见的几种排序算法 1.1算法的基本概 ...
- 用Java实现几种常用排序算法(先实现一个org.rut.util.algorithm.SortUtil)
先实现org.rut.util.algorithm.SortUtil这个类(以后每个排序都会用到): package org.rut.util.algorithm; import org.rut.ut ...
- php chilkat.certstore,angularjs实现冒泡排序算法的可视化
<angularjs实现冒泡排序算法的可视化>由会员分享,可在线阅读,更多相关<angularjs实现冒泡排序算法的可视化(44页珍藏版)>请在人人文库网上搜索. 1.angu ...
- python冒泡排序_5种python方法实现冒泡排序可视化:Bubble Sort Visualizer
1 说明: ===== 1.1 冒泡排序: 1.1.1 原理:比较两个相邻的元素,将值大的元素交换至右端. 1.1.2 来源:由来是因为越大的元素会经由交换慢慢"浮"到数列的顶端, ...
- 算法与数据结构(冒泡排序,选择排序和插入排序的总结)
冒泡排序,选择排序和插入排序的总结 在规模较小时,或者元素的有序性较高时,插入排序的时间复杂度可以接近 O(n) ,是上述三种排序里表现最好的 一.通过表格我们可以发现,冒泡排序的时间复杂度是要优于选 ...
最新文章
- 二叉树的路径(根节点到叶节点)Binary Tree Paths
- 安全测试基础 -- 概述【转载】
- BZOJ4596:[SHOI2016]黑暗前的幻想乡——题解
- 十分钟搭建自己的私有NuGet服务器-BaGet
- win10安装masm32 SDK并运行一个小程序
- 游戏 mysql优化工具_MySQL 性能优化神器 Explain 使用分析
- golang MySQL 占内存_使用golang插入mysql性能提升經驗
- 动态sql语句基本语法
- 游戏开发之类的构造函数调用时机(规则)及类对象作为另一个类的成员变量(C++基础)
- java日期互转:LocalDateTime、String、Instant、Date
- 使用浏览器查看UserAgent
- 记录对安卓开源项目【nodebb-webview】修改过程中遇见的问题以及解决办法
- 阿里云搭建Tomcat+Jdk+Mysql(阿里云系统CentOs)特完整
- html一个大网页5个小网页,5个范例告诉你:什么是自适应网页设计
- Translation Regime介绍
- python证书微软认证费用_微软认证有哪些?费用多少?
- 人类vs计算机的游戏,《星际争霸2》人类VS电脑的5分钟碉堡快攻法(疯狂难度)...
- Word中英文导致空格间距过大如何解决?
- 拾色器的四种色彩模型
- 计算机三级网络技术第三章(第一轮)
热门文章
- xForm应用开发手册
- 包教会一对一跟着CNS学单细胞测序(含空间转录组、chipseq、RNAseq、Atacseq 和外显子等)3月13日开始...
- 计算机显微视觉相关概念,机器视觉的概念及常见应用
- mysql多实例和主从区别_mysql多实例的安装以及主从复制配置
- 想学人工智能从哪入手?
- 如何成为一名Web前端开发人员?入行学习完整指南
- JavaScript的三大基本操作案例讲解
- 8个提高工作效率的Web前端开发框架总结
- 随便创建Servlet文件都出现,请求资源不可用的情况
- linux统计某个字符个数,Linux统计一个文件中特定字符个数的方法