一. 算法描述

  冒泡排序思想:依次比较相邻的数据,将小数据放在前,大数据放在后;即第一趟先比较第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. 【基础算法】算法,从排序学起(一)

    本文目录 1.导言 2.谈谈排序 2.1 何为排序?(What is sorting?) 2.2 排序的应用(Why sorting?) 2.3 常见排序算法的种类(How to sort?) 3.基 ...

  2. Equalizing Two Strings 冒泡排序or树状数组

    首先考虑排序后相等 如果排序后相等的话就只考虑reverse长度为2的,所以a或者b排序后存在相邻两个字母相等的话就puts YES,n>26也直接puts YES 不然的话就假设c为a,b排完 ...

  3. 冒泡排序算法实现思想个人理解

    一.冒泡排序算法个人理解 主要是以两个形成嵌套的for循环来完成的.外层的for循环以索引ix的值来逐个访问序列中的每个元素,ix的值由0开始增加到size(sequence) - 1,当外部的for ...

  4. 十三、冒泡排序算法及其优化

    一.基本介绍 **冒泡排序(Bubble Sorting)的基本思想是:**通过对待排序序列从前向后(从下标较小的元素开始),依次比较 相邻元素的值,若发现逆序则交换,使值较大的元素逐渐从前移向后部, ...

  5. c语言排序教学过程,C语言中冒泡排序算法教学设计

    排序是计算机科学中一项重要的技术,其应用范围广.使用频率高,因此对于排序算法的研究一直是计算机专家的重点.高校的程序设计类课程也将排序算法作为重难点进行教学. 1常见的几种排序算法 1.1算法的基本概 ...

  6. 用Java实现几种常用排序算法(先实现一个org.rut.util.algorithm.SortUtil)

    先实现org.rut.util.algorithm.SortUtil这个类(以后每个排序都会用到): package org.rut.util.algorithm; import org.rut.ut ...

  7. php chilkat.certstore,angularjs实现冒泡排序算法的可视化

    <angularjs实现冒泡排序算法的可视化>由会员分享,可在线阅读,更多相关<angularjs实现冒泡排序算法的可视化(44页珍藏版)>请在人人文库网上搜索. 1.angu ...

  8. python冒泡排序_5种python方法实现冒泡排序可视化:Bubble Sort Visualizer

    1 说明: ===== 1.1 冒泡排序: 1.1.1 原理:比较两个相邻的元素,将值大的元素交换至右端. 1.1.2 来源:由来是因为越大的元素会经由交换慢慢"浮"到数列的顶端, ...

  9. 算法与数据结构(冒泡排序,选择排序和插入排序的总结)

    冒泡排序,选择排序和插入排序的总结 在规模较小时,或者元素的有序性较高时,插入排序的时间复杂度可以接近 O(n) ,是上述三种排序里表现最好的 一.通过表格我们可以发现,冒泡排序的时间复杂度是要优于选 ...

最新文章

  1. 二叉树的路径(根节点到叶节点)Binary Tree Paths
  2. 安全测试基础 -- 概述【转载】
  3. BZOJ4596:[SHOI2016]黑暗前的幻想乡——题解
  4. 十分钟搭建自己的私有NuGet服务器-BaGet
  5. win10安装masm32 SDK并运行一个小程序
  6. 游戏 mysql优化工具_MySQL 性能优化神器 Explain 使用分析
  7. golang MySQL 占内存_使用golang插入mysql性能提升經驗
  8. 动态sql语句基本语法
  9. 游戏开发之类的构造函数调用时机(规则)及类对象作为另一个类的成员变量(C++基础)
  10. java日期互转:LocalDateTime、String、Instant、Date
  11. 使用浏览器查看UserAgent
  12. 记录对安卓开源项目【nodebb-webview】修改过程中遇见的问题以及解决办法
  13. 阿里云搭建Tomcat+Jdk+Mysql(阿里云系统CentOs)特完整
  14. html一个大网页5个小网页,5个范例告诉你:什么是自适应网页设计
  15. Translation Regime介绍
  16. python证书微软认证费用_微软认证有哪些?费用多少?
  17. 人类vs计算机的游戏,《星际争霸2》人类VS电脑的5分钟碉堡快攻法(疯狂难度)...
  18. Word中英文导致空格间距过大如何解决?
  19. 拾色器的四种色彩模型
  20. 计算机三级网络技术第三章(第一轮)

热门文章

  1. xForm应用开发手册
  2. 包教会一对一跟着CNS学单细胞测序(含空间转录组、chipseq、RNAseq、Atacseq 和外显子等)3月13日开始...
  3. 计算机显微视觉相关概念,机器视觉的概念及常见应用
  4. mysql多实例和主从区别_mysql多实例的安装以及主从复制配置
  5. 想学人工智能从哪入手?
  6. 如何成为一名Web前端开发人员?入行学习完整指南
  7. JavaScript的三大基本操作案例讲解
  8. 8个提高工作效率的Web前端开发框架总结
  9. 随便创建Servlet文件都出现,请求资源不可用的情况
  10. linux统计某个字符个数,Linux统计一个文件中特定字符个数的方法