冒泡排序的一点点心得

在大一的C语言课程中学习了排序算法中的冒泡算法,自以为已经掌握。但随着寒假自学的进展,发现冒泡算法没有当时想象的那么简单。

初学时:

复杂度 :O(n*n)

for(int i = 0;i<nums.length;i++) {
  for(int j = i+1;j<nums.length;j++) {
    if(nums[i] >nums[j]) {
      int temp = nums[j];
      nums[j] = nums[i];
      nums[i] = temp;
    }//升序
  }
}//排序

经过今天下午对排序算法的学习,发现当时对于冒泡排序的看法过于稚嫩。之其实是一种最最简单同时也是效率最低的一种交换排序算法。

其中时间复杂度、空间复杂度虽然与真正的冒泡排序算法相同,但当处理数据量更多时,相对于冒泡排序,多出了许多无用的交换。

冒泡排序:

复杂度 :O(n*n)

for(int i = 0;i<nums.length;i++) {
  for(int j = nums.length-1;j>i;j--) {
    if(nums[j-1] >nums[j]) {
      int temp = nums[j];
      nums[j] = nums[j-1];
      nums[j-1] = temp;
    }//升序
  }
}//排序

冒泡排序相对于最简单的交换排序来说,在排顶端数字时,也会对由下到上的数字进行排序。节省了交换次数。

但在我对对算法测试的时候,发现算法没有判断排序已经完成的语句。所以对于冒泡排序算法可以进行再次优化。

利用 isFlag 对数组进行标记!

冒泡排序优化:

复杂度 :O(n*n)

for(int i = 0;i<nums.length;i++) {
boolean isFlag = true;//设置标记为真
  for(int j = nums.length-1;j>i;j--) {
    if(nums[j-1] >nums[j]) {
      int temp = nums[j];
      nums[j] = nums[j-1];
      nums[j-1] = temp;
      isFlag = false;
    }
  }
  if(isFlag)//判断标记是否发生变化,若未发生变化,则排序完成,跳出循环
    break;
}//排序

优化后的冒泡排序算法避免了已经有序的情况进行判断造成的资源浪费。

注意:

很傻的错误,希望以后不要在犯。判断大小用的时数组中的元素。今天下午用了数组的交表进行比较。好傻。

第一次写,希望以后能坚持。加油!!!

原文地址:https://www.cnblogs.com/hby-gd/p/12249854.html

时间: 2024-10-03 16:09:26

冒泡排序的一点点心得的相关文章

快节奏的城市,我也可以悠然工作-谈对时间管理的一点点心得

在大城市里工作的童鞋们,是不是出现过正在进行某项工作时,突然又插进来另外一项工作,甚至有时候不只一项时,是不是很抓狂? 怎么办?主管交办,不能不办!但怎样办才好,才会最省时省力,确实值得我们去思考. 针对这个问题,有次在和领导聊天的时候,我专门请教过他,他的回答很坦诚:1,每个人很多时候都会在并行的做不只一项工作 2,几乎每个人都有拖延症的情况也包括他自己~.这个时候就需要时间管理了,合理有效的时间 管理,可以避免时间的浪费,可以在宝贵的时间内,处理好更多的事情.这里给大家推荐一种工作方法(番茄

读php手册一点点心得(1)

1.   要输出大段文本时,跳出PHP解析模式通常比将文本通过echo或print输出更有效率(手册) 2.   note :为了代码的发行及一致性,确保不要使用短标记,短标记仅通过php.ini配置文件中的指令short_open_tag打开后才可能使用,或者在PHP编译时加入了--enable-short-tag选项,php5.4后,短格式的echo标记<?=总会被识别并且合法,不管short_open_tag的设置是什么.(手册) 3.  当转换为boolean时,以下的值被认为是FALS

数据结构:链表 &gt;&gt; 链表按结点中第j个数据属性排序(冒泡排序法)

创建结点类,链表类,测试类 1 import java.lang.Object; 2 //结点node=数据date+指针pointer 3 public class Node { 4 Object iprop; 5 public Object getIprop(int i){ 6 switch(i){ 7 case 1:iprop=num;break; 8 case 2:iprop=name;break; 9 case 3:iprop=score;break; 10 } 11 return i

我这些年对游戏外挂辅助开发的一些心得和体会

今天闲来无事,游戏也上不了,就写点东西吧,很少在濮阳吧里发贴子,今天我也来点贡献吧,以下内容对于有些人来说,也许很有用,但对于一些不懂装懂的人来说呢,你不懂就不要乱拍砖,你可以保持沉默,大家都是有文化,有素质的人,对吧. 所谓游戏外挂,其实是一种游戏外辅程序,它可以协助玩家自动产生游戏动作.修改游戏网络数据包以及修改游戏内存数据等,以实现玩家用最少的时间和金钱去完成功力升级和过关斩将.虽然,现在对游戏外挂程序的“合法”身份众说纷纭,在这里我不想对此发表任何个人意见,让时间去说明一切吧. 好了,费

设计模式中聚合和组合--代码中的实现

●引言: 最近一直在看设计模式,以前写过一篇文章:设计模式中的关系在代码中的实现 之后他们问我说:聚合和组合在代码上怎样表现出生命期的不同.因为当时是真心不懂,不敢回答,现在有一点点心得,和大家分享一下. ●定义: 聚合:表示两个对象之间是整体和部分的弱关系,部分的生命周期可以超越整体.如电脑和鼠标. ?大话上的聚合: ?大话上的组合: 表示两个对象之间是整体和部分的强关系,部分的生命周期不能超越整体,或者说不能脱离整体而存在.组合关系的"部分",是不能在整体之间进行共享的. ●异同点

muParser公式库使用简介( 转)

muParser是一个跨平台的公式解析库,它可以自定义多参数函数,自定义常量.变量及一元前缀.后缀操作符,二元操作符等,它将公式编译成字节码,所以计算起来非常快. 当前版本V1.28,官方网址http://sourceforge.net/projects/muparser/,这里是关于该库使用交流https://sourceforge.net/forum/forum.php?forum_id=462843 它提供两种方式使用,一种是将它编译进你的程序中,使用C++类,另一种是将它编译成共享库,可

手把手教你写专利申请书/怎样申请专利

手把手教你写专利申请书·怎样申请专利 摘要小前言(一)申请前的准备工作    1.申请前查询    2.其它方面的考虑    3.申请文件准备(二)填写专利申请系列文档    1.实际操作步骤    2.详细操作    3.经验分享.注意事项(三)关于费用(四)其它的话參考资源提示常见问题的问与答 摘要: 怎样写好专利申请?由于非常多专利申请人都是第一次申请,因此,可能有一种神奇和些许恐惧.本文写的是怎样写专利申请书,手把手教你写专利申请并提供申请专利时的注意事项,专利申请费用及费用减缓等相关參

sql—前端验证

写了一个前端验证,html也忘记了,页面写的很粗略,将就看一下,毕竟是我人生第一个自己写的漏洞. 主界面,省略掉测试他是否有漏洞. Id处输入: 1' or 1=1# 省略中间步骤,直接爆一下东西: 输入:1' and 1=2 union select 1,2,group_concat(username,0x3a,password) from user# 这里贴一下我的代码: <html><head>    <title>M3tar的第一个注入</title>

LCD1602液晶显示模块深入详解篇一

(本文以HD44780主控芯片的LCD1602为蓝本进行描述,其中的截图也来自HD44780数据手册,用户可自行搜索其datasheet,有部分整理网上的,但绝对要比你看到的要深入得多) 一.接口 LCD1602是很多单片机爱好者较早接触的字符型液晶显示器,它的主控芯片是HD44780或者其它兼容芯片.刚开始接触它的大多是单片机的初学者.由于对它的不了解,不能随心所欲地对它进行驱动.经过一段时间的学习,我对它的驱动有了一点点心得,今天把它记录在这里,以备以后查阅.与此相仿的是LCD12864液晶