\ ⑧ Shou Ye ̄. if(aD】>aD+1】)//无序序 列中的相邻两个元素两两相互比较 几种简单排序算法的实现研究 吴 昊 { t=a[j+l】; aD+1】=aB】; a【j1 t; } } (3)简单选择排序。①算法思想。 摘要: “排序算法”是“数据结构”课程中很重要的一个章节内容,其部分算 简单选择排序把序列分成有序(前)和 无序(后)两个部分,其实质是在无序 法思想在“C语言程序设计”课程中也进行过程序描述,算法思想和程序转换对于 初学者来说较难理解,因此,实现这两种形式的对接是教学工作的重点。本文通 过设置变量的初始值,巧妙将关键变量的使用实现“两步走”,帮助初学者加强 对算法的理解。 关键词:排序;程序设计;算法 本文将具体对直接插入法进行详细 { //的最后一个元素小,则 地介绍,帮助初学者更好地理解这几种 需插入 排序算法的程序设计思路。 t=a[i】; 1.三种简单排序算法的实现思想及 a【i】:a【i一1];//有序序列中的最后 C程序实现过程 一个元素后移 (1)直接插入排序。①算法思 ofr(j=i一2;j>=0;j一一)//从有 想。直接插入排序把序列分成有序序列 序序列的倒数第二个元素开始比较 (前)和无序序列(后)两个部分,其 if(aB]>t)aD+1】=aD】; 实质是把无序序列中的第一个元素插入 else break; 到有序序列的对应位置。如果序列中的 aD+1]=t; 元素为n,则需要进行n-1次插入,每 } 次插入需要做若干次比较。②C程序 } 实现过程。 (2)冒泡排序。①算法思想。冒 #define N 10 泡排序把序列分成无序(前)和有序 main() (后)两个序列,其实质是把无序序列 { 中相邻两个元素依次比较,大者下沉 int a[Y】,i,J,t; //i,J分别用 (后移),移动到最后的元素即为有序 来做插入和比较的循环计数变量 序列的第一个元素,多次冒泡以后直至 //此外,i还用来表示无序序列中 序列有序。如果序列中的元素为n,则 第一个元素的下标 需要进行n-1次冒泡,每次冒泡需要 //从键盘中输入数给数组a[N1中 做若干次比较。②C程序实现过程。 的每个元素 #define N 10 for(i=0;i<N;i++) main() scanf(”%d”,&aIi]); { for(i=l;i<N;i++) int a【 ,i,J,t;Ili,J分别用来 if(a[i]<a[i-1】)//如果无序 做冒泡和比较的循环计数变量, 序列中的第一个元素比有序序列中 //此外,i还用来表示无序序 列中倒数第二个数 作者简介 //从键盘中输入数给数组a[Y】中 吴 昊(1982一),男,汉族,湖北 的每个元素 钟祥人,硕士,现为广西师范学院师园 ofr(i=0;i<N;i++) 学院专任教师,主要研究方向为嵌入式 scanf(”%dt',&a[i]); 系统。 ofr(i=N-2;i>=0;i--) f0r(j=0;j<=i;j++) 序列中选择一个最小的数放在无序序列 的开始,并作为有序序列的最后一个 数,若干次选择以后直至序列有序。如 果序列中的元素为n,则需要进行n一1 次选择,每次选择需要做若干次比较。 ②c程序实现过程。 #define N 10 main() { int a[N】,i,J,k,t; Ili,J分别 用来做选择和比较的循环计数变量, //此外,i用来表示无序序列中的 第一个元素 Ilk用来记录无序序列中最小元素 的下标 //从键盘中输入数给数组a[N】中 的每个元素 ofr(i=0;i<N;i++) scanf(”%dt.,&a[i1); ofr(i=0;i<N一1;i++) {k=i;//把无序序列中的第一个 元素作为最下的数 f0r(j=i+1;j<N;j++) if(a[k】>alj】)k=j; t a[i];a[i】=a[k];a[k】=t;// 把无序序列中的最小元素放到无序序列 首位 } } 2.结束语 本文主要针对“数据结构”中的一 些简单排序算法的程序设计方法进行了 一些探讨研究,其主要思路是更好地设 计程序中的变量,清晰地表述每个变量 的作用和意义,便于学生理解和掌握。 但排序中还有很多较为复杂的算法,其 教学过程具有灵活性、多样性,其教学 方法还有待于深入探讨和研究。 (作者单位:广西师范学院师园学院)