上机实验二 重要算法练习
目的和要求:
(1)熟悉排序、查找算法 (2)了解省考题型 实验内容:
先在D盘根文件夹下创建一个名为“my”的文件夹(以备后用)
完善题(将以下4题分别以my1.c、my2.c、my3.c、my4.c为文件名,保存到my文件夹中。 1、冒泡排序(起泡排序)
假设要对含有n个数的序列进行升序排列,冒泡排序算法步骤是:
①从存放序列的数组中的第一个元素开始到最后一个元素,依次对相邻两数进行比较,若前者大后者小,则交换两数的位置;
②第①趟结束后,最大数就存放到数组的最后一个元素里了,然后从第一个元素开始到倒数第二个元素,依次对相邻两数进行比较,若前者大后者小,则交换两数的位置; ③重复步骤①n-1趟,每趟比前一趟少比较一次,即可完成所求。 题目:任意读入10个整数,将其用冒泡法按升序排列后输出。 #define n 10 main() {int a[n],i,j,t;
for(i=0;i for(j=1;j<=n-1;j++) /*n个数处理n-1趟*/ for(i=0; _________________; i++) /*每趟比前一趟少比较一次*/ if(a[i]>a[i+1]){_____________; _____________;_____________;} for(i=0;i 2、选择法排序 选择法排序是相对好理解的排序算法。假设要对含有n个数的序列进行升序排列,算法步骤是: ①从数组存放的n个数中找出最小数的下标,然后将最小数与第1个数交换位置; ②除第1个数以外,再从其余n-1个数中找出最小数(即n个数中的次小数)的下标,将此数与第2个数交换位置; ③重复步骤①n-1趟,即可完成所求。 题目:任意读入10个整数,将其用选择法按升序排列后输出。 #define n 10 main() {int a[n],i,j,k,t; for(i=0;i for(i=0; ________________; i++) {k = i; /*总是假设此趟处理的第一个(即全部数的第i个)数最小,k记录其下标*/ for(j=_____________;j for(i=0;i printf(\ 3、归并排序 即将两个都升序(或降序)排列的数据序列合并成一个仍按原序排列的序列。 题目:有一个含有6个数据的升序序列和一个含有4个数据的升序序列,将二者合并成一个含有10个数据的升序序列。 #define m 6 #define n 4 main() {int a[m]={-3,6,19,26,68,100} ,b[n]={8,10,12,22}; int i,j,k,c[m+n]; ________________________; while(i else {c[k]=b[j]; ___________;} ___________; } while(______________________) /*若a中数据全部存放完毕,将b中余下的数全部存放到c中*/ {c[k]=b[j]; k++; j++;} while(______________________) /*若b中数据全部存放完毕,将a中余下的数全部存放到c中*/ {c[k]=a[i]; k++; i++;} for(i=0;i 4、折半查找(即二分法) 顺序查找的效率较低,当数据很多时,用二分法查找可以提高效率。使用二分法查找的前提是数列必须有序。 二分法查找的思路是:要查找的关键值同数组的中间一个元素比较,若相同则查找成功,结束;否则判别关键值落在数组的哪半部分,就在这半部分中按上述方法继续比较,直到找到或数组中没有这样的元素值为止。 题目:任意读入一个整数x,在升序数组a中查找是否有与x等值的元素。 #define n 10 main() {int a[n]={2,4,7,9,12,25,36,50,77,90}; int x,high,low,mid;/*x为关键值*/ scanf(\

