几种经典排序算法优劣比较的C++程序实现

来源 :教育学·综合版 | 被引量 : 0次 | 上传用户:zhzh06014201
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘 要:排序是编程过程中经常遇到的操作,它在很大程度上影响了程序的执行效率。目前关于排序的算法有很多,其中不乏非常精妙的算法。但是总体来说,作为一个计算机专业的学习者来说,必须要知道而且会亲自动手去实现文中列举的几种常见的算法。这不管对自己编程能力的提高还是日后的实习就业都会有莫大的帮助。
  关键词:选择排序 算法 比较 归并排序 冒泡排序法
  三种常见的排序算法大致可以分为两类:
  第一类是低级排序算法,有选择排序、冒泡排序。
  第二类是高级排序算法,有归并排序。
  下面就分别介绍一下这几种排序算法,并会给出C++的实现,实现代码均经过测试。
  一、低级排序算法
  1.选择排序
  (1)排序过程
  给定一个数值集合,循环遍历集合,每次遍历从集合中选择出最小或最大的放入集合的开头或结尾的位置,下次循环从剩余的元素集合中遍历找出最小的并如上操作,最后直至所有原集合元素都遍历完毕,排序结束。
  (2)实现代码
  //选择排序法
  template
  void Sort::SelectSort(T* array, int size)
  {
  int minIndex;
  for(int i = 0; i < size; i++)
  {
  minIndex = i;
  for(int j = i + 1; j < size; j++)
  {
  if(array[minIndex] > array[j])
  {
  minIndex = j;
  }
  }
  if(minIndex != i)
  {
  Swap(array, i, minIndex);
  }
  }
  }
  (3)分析总结
  选择排序时间复杂度比较高,达到了O(n^2),每次选择都要遍历一遍无序区间。选择排序对一类重要的元素序列具有较好的效率,就是元素规模很大,而排序码却比较小的序列。另外要说明的是选择排序是一种不稳定的排序方法。
  2.冒泡排序
  (1)排序过程
  冒泡排序的过程形如其名,就是依次比较相邻两个元素,优先级高(或大或小)的元素向后移动,直至到达序列末尾,无序区间就会相应地缩小。下一次再从无序区间进行冒泡操作,依此循环直至无序区间为1,排序结束。
  (2)实现代码
  //冒泡排序法
  template
  void Sort::BubbleSort(T* array, int size)
  {
  for(int i = 0; i < size; i++)
  {
  for(int j = 1; j < size - i; j++)
  {
  if(array[j] < array[j - 1])
  {
  Swap(array, j, j - 1);
  }
  }
  }
  }
  (3)分析总结
  冒泡排序的时间复杂度也比较高,达到O(n^2),每次遍历无序区间都将优先级高的元素移动到无序区间的末尾。冒泡排序是一种稳定的排序方式。
  二、高级排序算法
  (1)排序过程
  归并排序的原理比较简单,也是基于分治思想的。它将待排序的元素序列分成两个长度相等的子序列,然后为每一个子序列排序,然后再将它们合并成一个序列。
  (2)实现代码
  //归并排序
  template
  void Sort::MergeSort(T* array, int left, int right)
  {
  if(left < right)
  {
  int mid = (left + right) / 2;
  MergeSort(array, left, mid);
  MergeSort(array, mid + 1, right);
  Merge(array, left, mid, right);
  }
  }
  //合并两个已排好序的子链
  template
  void Sort::Merge(T* array, int left, int mid, int right)
  {
  T* temp = new T[right - left + 1];
  int i = left, j = mid + 1, m = 0;
  while(i <= mid && j <= right)
  {
  if(array[i] < array[j])
  {
  temp[m++] = array[i++];
  }
  else
  {
  temp[m++] = array[j++];
  }
  }
  while(i <= mid)
  {
  temp[m++] = array[i++];
  }
  while(j <= right)
  {
  temp[m++] = array[j++];
  }
  for(int n = left, m = 0; n <= right; n++, m++)
  {
  array[n] = temp[m];
  }
  delete temp;
  }
  (3)分析总结
  归并排序最好、最差和平均时间复杂度都是O(nlogn),是一种稳定的排序算法。
  三、结语
  如上介绍的几种排序算法都是基于算法最基本的思想来实现的,其实对其中一些算法都会有几种可以改进的地方,如能亲自实现,这对学生的学习和工作都会有莫大的帮助。
其他文献
摘 要:学校网站是学校对外开放的一个重要窗口:通过学校网站能够使更多人了解学校的基本信息、最新动态等内容,提升对于学校的感知;同时通过学校网站也能够发布一些通知、资讯,成为学校师生之间交流互动的一个平台。但是在以往实际操作的过程中,由于网站办理理念不科学、维护力度不深入、内容更新不及时、网站内容不完善,也造成学校网站很难发挥其应有的效用。新时期就需要我们用新的建设理念、新的管理模式,促进学校网站的
期刊
当今社会正处在一个重要的转型期。广大农村和普通城镇的民众,还不太能够看得见改革的曙光,新的读书无用论潜滋暗长,许多学生的学习积极性很低,教师的教学效率不高。部分授课老师没有按照新课程理念的要求来顺应素质教育的需要,没有完全转变教师角色,依然循着传统教法在“灌输”与空洞说教,尤其是思想品德课的教学,处于低效或无效状态的情况比较严重。如何让思品课摆脱这类窘境?结合近两年全面开展的“提高课堂教学有效性高
期刊
体育是义务教育的重要组成部分,体育课是各年级的必修课程。体育教学是构成现代教育的重要部分,是一个能将体质、意志和精神融为一体的综合教育过程。因此,在教学中,教育者不仅要传授体育的知识、技术和技能,而且要适应社会的发展和需要,利用体育独有的特点,对学生进行渗透和培养,提高学生的素质。  体育教学是由学生、教师、教材和进行教学手段四个基本要素组成,学生是体育教学的主体,教师在教学中起主导作用。因此,调
期刊
摘 要:在实施素质教育的时代,为了让学生的自主学习能力和发散思维有效提高。随着计算机技术突飞猛进,计算机知识的普及以及大力推进计算机教育迫在眉睫。该如何让学生接受并热衷于计算机事业的发展是计算机普及的重要保证。  关键词:自主学习 普及计算机 发展素质教育  理论重于实践是当代高中生计算机课程的普遍弊端。这种枯燥乏味的的教育模式不但没使计算机知识有效普及而且还使大部分学生学习积极性不高,学习新知识
期刊
摘 要:多媒体以文字、实物、图像、声音等多种途径向学生传递信息,使课堂教学更加多样性、生动性、实效性,同时大大增加了课堂容量。而巧用多媒体辅助教学对提高化学课堂教学效率有很大的助益。  关键词:多媒体 辅助 化学教学  不容置疑的是,运用多媒体教学手段确实可以增强学生的学习兴趣和加深对化学知识的理解,尤其在高中新课程改革的今天,巧用多媒体辅助教学对提高化学课堂教学有很大的助益。  一、巧用多媒体强
期刊
在教学过程中,学生普遍感到困难的是记忆单词。为了提高学生的记忆效率,笔者在试用新教材的过程中,对如何提高学生的记忆力方面作了一些探索。记单词是学生学英语的一个薄弱环节,如何帮助学生在单位时间内最高效率地牢牢记住所学的词汇,只有解决了效率的问题,才能既减轻学生的负担,又提高教学质量,我们要向效率要时间,而不是用时间补效率,这是我们英语教师要致力研究的课题。  那么,应该如何在课堂教学中有意识地培养学
期刊
作业设计是课堂教学的重要组成部分,是帮助学生巩固所学知识、形成技能技巧、培养思维品质、提高综合能力的重要手段。纵观我们现行的作业设计,还存在课内书面作业多,课外实践作业少;硬性布置作业多,弹性自选作业少;机械重复作业多,探究体验作业少;独立完成作业多,合作完成作业少;沿袭模仿作业多,突破创新作业少;脱离学生实际作业多,解决现实问题作业少等弊端,这严重束缚了学生创造性及个性的发展。  为了切实减轻学
期刊
物理学是一门以实验为基础的科学,实验不仅作为一种研究物理方法,而且还作为物理的一种思想,在物理教学中占有极其重要的地位。物理教学中怎样体现这一学科特性是课程标准理念下中学物理改革的重要内容。 信息技术正在改变人们的工作方式、思维方式和教育方式,如何发挥多媒体技术在课程改革中的作用,也是当前课程改革研究的一个重要问题。  我在多年的教学实践中,通过对多媒体辅助教学的不断摸索,认为多媒体在物理教学中的
期刊
批改作业是教学实践的一个重要环节,它对于调整教学方案,指导学生学习,检查教学效果,发挥着十分重要的作用。但在农村小学数学教学中,部分教师对作业批改的认识还不到位,还停留在只注重结果对错传统观念中,批改方式也只是在学生的作业本上简单地划勾勾叉叉,忽视对学生思维过程的考察,没有认真了解学生对知识技能的掌握程度,更不能让学生准确了解自己错误的环节和原因,根本达不到指导学生的目的。笔者在长期的农村数学教学
期刊
摘 要:多媒体信息技术已经广泛地应用到课堂教学中,它以教学过程的可视化、互动化、个性化,使得课堂“灵动”了起来,变得引人入胜。近些年,笔者也在音乐教学中充分发挥网络优势,收集大量有益于教育教学活动的网络资源,把文字、图像、声音、动画等有机结合起来,丰富了音乐欣赏课的教学手段,使抽象的音乐形象化,枯燥的理论趣味化,使学生在轻松、愉悦中学会欣赏音乐、律动表演、编创音乐等,让音乐欣赏课迸射出了无穷的魅力
期刊