数组排序算法浅析

来源 :亚太教育 | 被引量 : 0次 | 上传用户:twpt168
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘  要:数组排序是程序设计的一项重要内容,通过运用数组排序的算法,我们能够将很多问题便捷化。在计算机编程中排序是经常遇到的一个问题,所有的数据只有经过一定的排序才会更有意义。在众多算法中,本文对顺序排序、冒泡排序和选择排序这三种基本的排序算法进行详细介绍。
  关键词:数组;排序算法;浅析
  数组排序就是将数组中的元素按照某种特定的顺序进行排列,如升序或降序。数组排序方法很多,有冒泡排序、顺序排序、选择排序等。本文对一个长度为N的整型数组a,以升序排列为例,对顺序排序、选择排序和冒泡排序的算法进行解析,并在最后加以比较。
  一、顺序排序
  顺序排序的主要思想是每一轮比较结束后都可以确定某一元素;在一轮的比较过程中,将要确定的位置上的元素与其后所有的元素进行比较;对于一个长为N的数组,需进行N-1轮比较。其第一轮的比较过程如下:
  
  该轮中,a[0]与a[1]~a[n-1]的所有元素进行比较,比较过程中,如果发现哪个元素比a[0]小,则与a[0]进行交换。一轮比较之后,确定a[0]为数组中最小的元素。相同方法,依次确定a[1]、a[2]、a[3]…a[n-2]。
  顺序排序主要特点描述
  待确定的元素 被比较的元素 比较主体 用j表示
  被比较元素的下标
  a[0] a[1]~a[n-1] a[0]与a[1]~a[n-1] j的范围是[1,n-1]
  a[1] a[2]~a[n-1] a[1]与a[2]~a[n-1] j的范围是[2,n-1]
  ……
  a[n-2] a[n-1]~a[n-1] a[n-2]与a[n-1] j的范围是[n-1,n-1]
  总结:一共进行了n-1轮比较:
  以i来表示待确定元素下标
  以j来表示被比较元素的下标
  则i的范围是[0,n-2],j的范围是[i+1,n-1]
  由上表,可以写出其实现代码
  for(i=0;i<N-1;i++)
  { for(j=i+1;j<N;j++)
  if(a[i]>a[j])
  {t=a[i];a[i]=a[j];a[j]=t;} }
  可以发现当数组原有的顺序是降序,要实现其升序排序时,每一轮中的交换的次数将会非常多,严重影响排序效率。所以对该方法进行改进:先找出数组中最小值,再与相应位置上的元素进行交换,这就是选择排序。
  二、选择排序
  选择排序的主要思想是每次从待排序的数据元素中选出最小的一个元素,放在待排序数列的起始位置,直到全部待排序列的数据元素全部排列完毕。
  第一轮的比较过程如下:
  
  
  选择排序的主要过程描述
  待确定的元素 k的初值 被比较的元素 比较主体 用j表示
  被比较元素的下标
  a[0] 0 a[1]~a[n-1] a[k]与a[1]~a[n-1] j的范围是[1,n-1]
  a[1] 1 a[2]~a[n-1] a[k]与a[2]~a[n-1] j的范围是[2,n-1]
  ……
  a[n-2] n-2 a[n-1]~a[n-1] a[k]与a[n-1] j的范围是[n-1,n-1]
  总结:一共进行了n-1轮比较:
  以i来表示待确定元素下标
  以j来表示被比较元素的下标
  以k来表示指向最小的元素下标
  则k的初值是k=i;i的范围是[0,n-2];j的范围是[i+1,n-1]。
  比较过程中如果发现更小的,则让k指向它即k=j;一轮结束后,如果此时k与初值不等,则说明找到了一个更小的值,这时才与a[i]进行一次交换。
  选择排序的实现代码
  for(i=0;i<N-1;i++)
  {k=i;
  for(j=i+1;j<N;j++)  if(a[k]>a[j]) k=j;
  if(k!=i)  {t=a[k];a[k]=a[i];a[i]=t;} }
  选择排序相较于顺序排序有更高的执行效率,而且思想同样利于理解。
  三、冒泡排序
  冒泡排序的主要思想是“相邻元素”之间的比较,如果前面的元素大于后面元素就把他们互换。一轮比较之后可以确定最后一个元素为最大,第二轮比较之后可以确定最后一个元素为第二大的元素……依次类推,第N-1轮比较,可以确定倒数第二个元素,这个时候数组的排序完成。冒泡排序的过程如下:
  
  冒泡排序的实现代码
  for(i=N-2;i>=0;i--)
  {for(j=0;j<=i;j++)
  if(a[j]>a[j+1])
  {t=a[j];a[j]=a[j+1];a[j+1]=t;}}
  四、算法浅析
  顺序排序算法,思想简单易于理解且适于任何的数组,无论什么情况下都可以使用;但是顺序排序效率较低,可以采用选择排序法进行改进;即使如此选择排序的效率依然受到比较次数的影响,所以对于比较元素比较少的数组,可以采用冒泡排序法。
  如果数组中99%的数值已经排序好,即只有很少的元素需要进行排序,可以选择冒泡排序法;如果你所要排序的数据数目相对较少并满足100个以下,你就可以采用选择排序法;如果上述几种情况都不满足,那么就选普遍适用的排序算法即顺序排序法即可。
  五、结语
  以上所述只是三种常见排序,在众多的排序算法中各有优缺点,每一种算法只有在某一种情况下才表现的最好,我们应当合理的根据实际情况选择算法。
  参考文献:
  [1]张巍.基于PageRank算法的搜索引擎优化策略研究[D].四川大学,2005.
  [2]郭敏杰.基于云计算的海量网络流量数据分析处理及关键算法研究[D].北京邮电大学,2014.
  [3]谭浩强.C程序设计.清华大学出版社,2010.
  (作者单位:江苏省宿城中等专业学校)
其他文献
秦艽是中国重要的传统中藏药材,为了解秦艽的休眠机制提高其萌发率,扩大引种栽培资源,对青藏高原野生秦艽组中的麻花艽、管花秦艽和黄管秦艽的种子萌发特性进行了比较。结果
摘要:本文针对生源数量降低引起质量的下降及生源的多样化,而引起的教学质量下降的问题,通过对学生的分层次、分兴趣进行教育,以弱化生源问题引起的教学质量的降低。  关键词:生源素质;榜样;精英;兴趣;特长  中图分类号:G642文献标志码:A文章编号:2095-9214(2015)10-0251-02  一、高职院校的生源现状  1999年,党中央、国务院在《关于深化教育改革全面推进素质教育的决定》中
摘 要:本文介绍了学习金字塔模型教学法的思维以及在《汽轮机原理》整个教学活动中的具体运用。工科类大学实验教学在专业课的教学过程中占有重要地位,通过实验可以验证理论,使课堂讲授的理论容易被学生接受,这种方法的实施不仅可以获得最大的平均教学保留率,提高教学效果,还可使学生从被动的聆听与吸收提升到主动的学习与建构,从而提高分析问题和解决问题的能力,激发学习的积极性。  关键词:金字塔;汽轮机;教学模式 
英语是一门外语,对小学生而言,既生疏又困难,在这样一种大环境之下,要教好英语,就要让学生喜爱英语,让他们对英语产生兴趣。一年级的孩子有着模仿性强、活泼好动、乐于参加活动的特点,这是他们学习英语的有利条件。为了帮助孩子更轻松地学习英语,笔者在如何提高英语课堂效率方面有以下几点尝试:  一、直观教学,真情实感  一年级的学生,注意力持续的时间相对较短,而直观教具形象、生动,易于激发学生的兴趣。于是我在
以滨海沙地上纹荚相思(Acacia aulacocarpa)、厚荚相思(A.crassicarpa)、肯氏相思(A.cunninghamia)和卷荚相思(A.cincinnata)为试验对象,在春季测定自然条件下4种相思叶绿素荧光参数,以探
摘 要:在我国现代高校中,职业教育是非常典型的教育类型,与传统高校相比,职业教育在理念、方法、目标等方面,都有很大差异,在教育体系方面,职业教育也与传统高校不同。本文便从职业教育的理念出发,从目标、内容、方法等三个方面,研究如何构建起科学完善的高校思政教育体系,从而帮助高校培养出更多思政素质较高的人才。  关键词:职业教育;思政教育;体系构建  中图分类号:G710 文献标志码:A 文章编号:20
摘 要:九年级学生学习化学伊始,出于好奇心驱使和变幻莫测的化学实验吸引,学生对本学科充满浓厚的学习兴趣,但随着时间推移,学学生学习兴趣分化现象凸显。引起兴趣分化现象原因复杂。但是归纳起来,主要与教师教法、目标的选择、学法的指导有关。克服兴趣分化现象的办法是坚持教法改进、兴趣的激发和学法的指导。  关键字:初中化学;兴趣;分化;克服  化学是九年级新增学科,学习伊始,出于好奇心驱使和变幻纷繁的化学实
摘 要:教师的课堂话语是一门艺术,教师用什么方式表达以及怎样表达这门艺术直接影响着教学效果。本文从语用学角度,运用经济原则研究英语教师的课堂话语,以期探究高效的教师课堂话语来提高课堂的教学效果。  关键词:经济原则;课堂话语;教学效果  一、前言  话语的本质功能就是交际,或者说交际的工具是话语,教师课堂话语是一种在特殊语境下的交流,不同于日常生活中的交流。英语教师的课堂话语作为语言教学的一种有其
口头表达能力是语言实践的重要工具,在交谈、会议等各种日常活动中发挥着不可忽视的作用,是写作的有力基础。课标总体要求小学生能具体明确、文从字顺地表达。并提出了明确的阶
空气负氧离子浓度是评价空气质量的重要指标之一,空气负氧离子浓度高低直接影响空气清新指数和人体健康。在福建省永泰县辖区内选取102个空气负氧离子浓度监测点,运用地统计