不同排序算法的性能分析研究

来源 :电脑迷·上旬刊 | 被引量 : 0次 | 上传用户:wangxiaoyuzhang
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘要:排序,字面意思就是排列顺序,例如给一串数字,按照从小到大,或者从大到小的顺序进行排列。当然排列的过程需要用算法程序严格表述出来,排序算法种类很多,需要根据具体的衡量标准来进行考量,例如时间复杂度,空间复杂度,稳定性,等等,当然在某种程度上,一般提降低空间复杂度就回提升时间复杂度,所以我们在具体应用算法时,应根据具体的应用场景选择更合适的算法。
  关键词: 排序;排序算法
  1 排序算法的分类
  排序(Sorting) 算法是我们科学研究过程中的一个常规算法,作用是将一个数据元素(或记录)的随意排列,然后重新排列成一个大小有序的序列。
  1 稳定度(稳定性)
  稳定性是一个特别重要的评估标准,稳定的算法在排序的过程中不会改变元素彼此的位置的相对次序,反之不稳定的排序算法经常会改变这个次序,这是我们不愿意看到的,我们在使用排序算法或者选择排序算法时,更希望这个次序不会改变,更加稳定,所以排序算法的稳定性,是一个特别重要的参数衡量指标依据。
  就如同空间复杂度和时间复杂度一样。有时候甚至比时间复杂度,空间复杂度更重要一些。
  所以往往评价一个排序算法的好坏往往可以从下边几个方面入手:
  (1)时间复杂度:即从序列的初始状态到经过排序算法的变换移位等操作变到最终排序好的结果状态的过程所花费的时间度量。
  (2)空间复杂度:就是从序列的初始状态经过排序移位变换的过程一直到最终的状态所花费的空间开销。
  (3)使用场景:排序算法有很多,不同种类的排序算法适合不同种类的情景,可能有时候需要节省空间对时间要求没那么多,反之,有时候则是希望多考虑一些时间,对空间要求没那么高,总之一般都会必须从某一方面做出抉择。
  (4)稳定性:稳定性是不管考虑时间和空间必须要考虑的问题,往往也是非常重要的影响选择的因素。
  2 几种种算法的基本思想及其分析
  2.1直接插入排序
  2.1.1算法思想
  例如:给定n=8,数组R中的8个元素的排序码为(8,3,2,1,7,4,6,5),则直接选择排序的过程如下所示
  由于百科不方便画出关联箭头 所以用 n -- n 表示 :
  初始状态 [ 8 3 2 1 7 4 6 5 ] 8 -- 1
  第一次 [ 1 3 2 8 7 4 6 5 ] 3 -- 2
  第二次 [ 1 2 3 8 7 4 6 5 ] 3 -- 3
  第三次 [ 1 2 3 8 7 4 6 5 ] 8 -- 4
  第四次 [ 1 2 3 4 7 8 6 5 ] 7 -- 5
  第五次 [ 1 2 3 4 5 8 6 7 ] 8 -- 6
  第六次 [ 1 2 3 4 5 6 8 7 ] 8 -- 7
  第七次 [ 1 2 3 4 5 6 7 8 ] 排序完成
  2.1.2时间复杂度
  从时间复杂度的角度考虑,当然了,如果所给我们的序列如果已经是要求的序列状态了,这种情况下是最理想的情况,时间包括空间复杂度最低,或者起码是有顺序的,那么时间复杂度也仅仅是O(n)而已。反之如果初始状态完全与理想状态的顺序相反那么,复杂度最高,为O(n?)。
  2.1.3空间复杂度
  空间复杂度为O(1).
  2.1.4代码实现
  void charupaixu(elemtype R[], int n) {
  int i, k, m;
  elemtype t;
  for (k = 0; ik< n - 1; k++) {
  m = k;
  for (j = k + 1; j < n; j++)
  if (R[j] < R[m]) m = j;
  if (m != k) {
  t = R[k];
  R[k] = R[m];
  R[m] = t;
  }
  }
  }
  2.2希尔排序
  2.2.1算法思想
  首先取一个变量小于n的数字,m  2.2.2时间复杂度
  参考资料显示为O(n^1.3)
  2.2.3空间复杂度
  O(1)。
  2.2.4代码实现
  ar arr = [49, 38, 65, 97, 76, 13, 27, 49, 55, 04];
  var leng= arr.length;
  for (var fr = Math.floor(len / 2); fr > 0; fraction = Math.floor(fr / 2)) {
  for (var i = fr; i < leng; i++) {
  for (var j = i - fr; j >= 0 && arr[j] > arr[fr + j]; j -= fr) {
  var temp = arr[j];
  arr[j] = arr[fr + j];
  arr[fr + j] = temp;
  }
  }
  }
  console.log(arr);
  2.3選择排序
  2.3.1算法思想
  顾名思义选择排序就是首先通过对初始状态的序列状态,用第二个元素跟第一个元素比较,如果第一个应该放最大的元素,依次用第二个跟第一个比较如果第二个比它大,则记住第二个数字的位置L,再用第二个数字跟第三个数字比较,找到最大的记住每次最大的L值,一直到遍历完左右的,这样一边下去就确定了哪个最大,需要跟第一个数字交换的话,用L为数字换第一个就行了,不需要交换就继续这样的求出第二个数字直到结束。
  2.3.2时间复杂度
  同样选择排序的算法时间复杂度也要跟它的初始状态有关系,O(n2)。
  2.3.3空间复杂度
  O(1)。
  2.3.4代码实现
  class xeuanzepaixu {
  public:
  T data;
  int id;
  int at;
  TreeNode & operator=(TreeNode & treenode)
  {
  this->data=treenode.data;
  this->id=treenode.id;
  this->at=treenode.at;
  return *this;
  }
  };
  3 结语
  本文分别介绍几种常用的排序算法,其中包括,希尔排序,选择排序等,并且每种排序算法分别从算法思想,算法时间复杂度,算法空间复杂度和应用场景来进行性能分析,并且给出了代码实现。在实际应用中应该根据具体问题来选择适合的排序算法。
其他文献
通过对华能汕头电厂等锅炉压力容器及承压构件的制造质量进行安全性能检验 ,可以看出无论是进口机组 ,还是国产机组 ,都存在不同程度的设备制造质量问题 ,有些质量问题还是比
为了发挥在三相负荷不平衡时无功补偿装置的作用,用无触点的固态继电器和交流接触器进行电容器组的分相自动控制投切,使每一相都能达到恰当的无功补偿,以提高电压水平和降低
叙述 1 998年的长江特大洪水的产生发展、高位持续、消退 3个时期的情况 ,阐明了 1 998年长江洪水对岳阳电厂、鄂州电厂、武钢自备电厂、汉川电厂的安全所产生的影响 ,提出了
施工企业要占有市场,必须提高安装工程的质量,创建达标工程,确保机组投产后能长期、安全、可靠运行,为业主创造良好的经济效益,这是新形势下电力建设单位面临的新问题.要实现
ZJD油田阜三段油藏是典型的深层低渗薄层油藏,天然开发产量递减快,注水开发难度大,试注CO2开发取得了一定的成果,但油藏整体采出程度不高,通过对阜三段油藏开发历程及开发现
1月17日0时12分,长征三号丙运载火箭在西昌卫星发射中心起飞,成功地将我国第三颗北斗导航卫星送人预定轨道.这标志着北斗卫星导航系统工程建设又迈出重要一步,卫星组网按计划
摘要:本文针对“拍照赚钱”类APP任务标价问题,提出基于任务打包的定价模型。通过多元回归拟合、BP神经网络给出了项目任务标价模型。采用非线性规划,以最大任务效用为规划目标,对定价模型进行改进,得出打包联合发布不仅可以使任务完成率提高,还可以降低劳务众包平台的成本。  关键词:多元回归拟合;非线性规划;BP神经网络  1 非线性回归模型  首先将任务定价按照由低到高的顺序排列,相同的任务定价划分为一
珠海电厂 2 4 0m烟囱钢内筒施工采用常规吊具组装好钢内筒顶段 ,装上密封头 ,内底座等构件 ,以压缩空气为动力 ,顶升起组装好的钢内筒自身段 ,在逐步接高中逐步上升 ,直到设
甲烷化反应的主要原理是将CO和CO2在特定反应环境和催化剂作用下转换为CH4.在该化学反应中,催化剂起到了非常关键性的作用.目前市场上用于甲烷化反应的催化剂主要有Ni基催化
上一讲介绍了G3系列PLC的模块种类、硬件基本知识以及G3系列PLC的特点和优点.本讲将着眼于G3强大的模拟量处理功能,全面介绍模拟量模块的种类、性能特点和使用注意事项,在阐