几种简单排序算法的实现研究

来源 :求知导刊 | 被引量 : 0次 | 上传用户:caobing1983
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘 要:“排序算法”是“数据结构”课程中很重要的一个章节内容,其部分算法思想在“C语言程序设计”课程中也进行过程序描述,算法思想和程序转换对于初学者来说较难理解,因此,实现这两种形式的对接是教学工作的重点。本文通过设置变量的初始值,巧妙将关键变量的使用实现“两步走”,帮助初学者加强对算法的理解。
  关键词:排序;程序设计;算法
  本文将具体对直接插入法进行详细地介绍,帮助初学者更好地理解这几种排序算法的程序设计思路。
  1. 三种简单排序算法的实现思想及C程序实现过程
  (1)直接插入排序。①算法思想。直接插入排序把序列分成有序序列 (前)和无序序列(后)两个部分,其实质是把无序序列中的第一个元素插入到有序序列的对应位置。如果序列中的元素为n,则需要进行n-1次插入,每次插入需要做若干次比较。②C程序实现过程。
  #define N 10
  main()
  {
  int a[N],i,j,t;     //i,j分别用来做插入和比较的循环计数变量
  //此外,i还用来表示无序序列中第一个元素的下标
  //从键盘中输入数给数组a[N]中的每个元素
  for(i=0;i<N;i++)
  scanf("%d",&a[i]);
  for(i=1;i<N;i++)
  if(a[i]<a[i-1])  //如果无序序列中的第一个元素比有序序列中
  {           //的最后一个元素小,则需插入
  t=a[i];
  a[i]=a[i-1];//有序序列中的最后一个元素后移
  for(j=i-2;j>=0;j--)//从有序序列的倒数第二个元素开始比较
   if(a[j]>t)a[j+1]=a[j];
   else break;
  a[j+1]=t;
  }
  }
  (2)冒泡排序。①算法思想。冒泡排序把序列分成无序(前)和有序 (后)两个序列,其实质是把无序序列中相邻两个元素依次比较,大者下沉 (后移),移动到最后的元素即为有序序列的第一个元素,多次冒泡以后直至序列有序。如果序列中的元素为n,则需要进行n-1次冒泡,每次冒泡需要做若干次比较。②C程序实现过程。
  #define N 10
  main()
  {
  int a[N],i,j,t;//i,j分别用来做冒泡和比较的循环计数变量,
  //此外,i还用来表示无序序列中倒数第二个数
  //从键盘中输入数给数组a[N]中的每个元素
  for(i=0;i<N;i++)
  scanf("%d",&a[i]);
  for(i=N-2;i>=0;i--)
  for(j=0;j<=i;j++)
   if(a[j]>a[j+1])//无序序列中的相邻两个元素两两相互比较
  {
  t=a[j+1];
  a[j+1]=a[j];
  a[j]=t;
  }
  }
  (3)简单选择排序。①算法思想。简单选择排序把序列分成有序(前)和无序(后)两个部分,其实质是在无序序列中选择一个最小的数放在无序序列的开始,并作为有序序列的最后一个数,若干次选择以后直至序列有序。如果序列中的元素为n,则需要进行n-1次选择,每次选择需要做若干次比较。②C程序实现过程。
  #define N 10
  main()
  {
  int a[N],i,j,k,t;   //i,j分别用来做选择和比较的循环计数变量,
  //此外,i用来表示无序序列中的第一个元素
  //k用来记录无序序列中最小元素的下标
  //从键盘中输入数给数组a[N]中的每个元素
  for(i=0;i<N;i++)
  scanf("%d",&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;
  t=a[i];a[i]=a[k];a[k]=t;//把无序序列中的最小元素放到无序序列首位
   }
  }
  2.结束语
  本文主要针对“数据结构”中的一些简單排序算法的程序设计方法进行了一些探讨研究,其主要思路是更好地设计程序中的变量,清晰地表述每个变量的作用和意义,便于学生理解和掌握。但排序中还有很多较为复杂的算法,其教学过程具有灵活性、多样性,其教学方法还有待于深入探讨和研究。
  (作者单位:广西师范学院师园学院)
其他文献
摘 要:随着高职学院近年来办学规模上的迅猛发展,校舍面积、招生规模、实验设施、师资力量等硬件指标上了较大的台阶。相对于良好的“硬件”设施,映衬出的却是“软件”—— 学生综合素质修养方面的不足。在高职学院力争成为优秀院校的进程中,了解学生的整体素质,建立全面实施素质教育的制度是十分关键的。从这个角度出发,本文对当前高职学院的学生素质和素质教育进行了简析与探讨。  关键词:高职学院;学生素质;素质教育
本文针对普通高校理工类C语言教学的现状,提出了理论教学、案例分析、项目实训三位一体教学模式新思路,加强培养学生发现问题、提出问题和解决问题的能力;把论文介绍的方法用于