电子科技大学 通信与信息工程 学院
标 准 实 验 报 告
(实验)课程名称 软件技术基础实验
电子科技大学教务处制表
电 子 科 技 大 学
实 验 报 告
一、实验室名称:校公共机房 二、实验项目名称:查找与排序 三、实验学时:4学时 四、实验原理:
使用VS2010等C语言集成开发环境(IDE),在微型计算机上对程序进行编辑、编译、连接与运行。通过上机练习掌握顺序查找、二分查找函数、简单选择法、直接插入法、冒泡法排序、快速排序等方法、过程和实际应用。
五、实验目的:
1. 熟练掌握顺序查找、二分查找函数、简单选择法、直接插入法、冒泡法
排序、快速排序等算法方法并实现。 2. 掌握课程平台使用方法。
六、实验内容:
ex5_1:查找
设有序序列的数据元素为: (3,10,13,17,40,43,50,70) 1)编写顺序查找函数 2)编写二分查找函数
3)在主程序中输入关键字(43和5),分别调用两种查找函数,输出结果。
//第一题
#include int data[maxnum]; int length; }list_type; void create(list_type *l) { l->length=8; l->data[0]=3; l->data[1]=10; l->data[2]=13; l->data[3]=17; l->data[4]=40; l->data[5]=43; l->data[6]=50; l->data[7]=70; } void shunxucz(list_type *l,int a1,int a2) { int i,flag=0; printf(\"-----------------------------------------------\\n\"); printf(\"顺序查找法:\\n\"); for(i=0;i if(a1==l->data[i]) {printf(\"%d是第%d个元素\\n\ } if(flag==0) printf(\"表中没有大小为%d的元素\\n\ flag=0; for(i=0;i if(a2==l->data[i]) {printf(\"%d是第%d个元素\\n\ } if(flag==0) printf(\"表中没有大小为%d的元素\\n\} void erfencz(list_type *l,int a1,int a2) { printf(\"-----------------------------------------------\\n\"); printf(\"二分查找法:\\n\"); int low,h,m,flag=0,i; low=0; h=l->length-1; for(i=0;i m=(low+h)/2; //如果有小数就向小的数字取值9/2=4 if(l->data[m]==a1) {printf(\"%d是第%d个元素\\n\ else if(l->data[m]<22) low=m+1; else if(l->data[m]>22) h=m-1; } if(flag!=1) printf(\"表中没有大小为%d的元素\\n\ flag=0; low=0; h=l->length-1; for(i=0;i m=(low+h)/2; //如果有小数就向小的数字取值9/2=4 if(l->data[m]==a2) {printf(\"%d是第%d个元素\\n\ else if(l->data[m]<22) low=m+1; else if(l->data[m]>22) h=m-1; } if(flag!=1) printf(\"表中没有大小为%d的元素\\n\} int main() { int flag1=43,flag2=5; list_type list,list1,list2; create(&list);create(&list1);create(&list2); shunxucz(&list1,flag1,flag2); erfencz(&list1,flag1,flag2); printf(\"-----------------------------------------------\\n\"); } ex5_2:排序 1)编写简单选择法函数 2)编写直接插入法函数 3)编写冒泡法排序函数 4)编写快速排序函数 5)在主程序中输入一组数据元素(513,87,512,61,908,170,897,275,653,462),分别调用4种排序函数,输出每趟排序结果。 //第二题 #include int data[maxnum]; int length; }list_type; void create(list_type *l) { l->length=10; l->data[0]=513; l->data[1]=87; l->data[2]=512; l->data[3]=61; l->data[4]=908; l->data[5]=170; l->data[6]=897; l->data[7]=275; l->data[8]=653; l->data[9]=462; } void charupx(list_type *l) { printf(\"-----------------------------------------------\\n\"); printf(\"插入排序法:\\n\"); printf(\"分步过程:\\n\"); int i,j,k; int temp; for ( i=1; i temp=l->data[i]; j=i-1; while ((j>=0)&& (temp l->data[j+1]=l->data[j]; j=j-1; } l->data[j+1]=temp; if(i==9) printf(\"最终结果:\\n\"); for(k=0;k printf(\" %d \ printf(\"\\n\"); } } void maopaopx(list_type *l) { int temp; int i,j,k; printf(\"-----------------------------------------------\\n\"); printf(\"冒泡排序法:\\n\"); printf(\"分步过程:\\n\"); for(i=0;i if(l->data[i]>l->data[j]) { temp=l->data[i];l->data[i]=l->data[j];l->data[j]=temp; } } if(i==9) printf(\"最终结果:\\n\"); for(k=0;k void xuanzepx(list_type *l) { int temp,i,j,k; printf(\"-----------------------------------------------\\n\"); printf(\"选择排序法:\\n\"); printf(\"分步过程:\\n\"); for(i=0;i for(j=i;j if(l->data[j] temp=l->data[j]; l->data[j]=l->data[i]; l->data[i]=temp; } } if(i==9) printf(\"最终结果:\\n\"); for(k=0;k printf(\" %d \ printf(\"\\n\"); } } void quick_sort( int *a, int low, int high) { int i = low, j = high; int temp = a[ low]; if( low >= high) return; while( i != j) { while( i < j && a[ j] >= temp) j--; a[ i] = a[ j]; while( i < j && a[ i] <= temp) i++; a[ j] = a[ i]; } a[ i] = temp; quick_sort( a, low, i - 1); quick_sort( a, i + 1, high); for(i=0; i list_type list,list1,list2,list3; create(&list);create(&list1);create(&list2);create(&list3); xuanzepx(&list2); charupx(&list); maopaopx(&list1); printf(\"-----------------------------------------------\\n\"); printf(\"快速排序法:\\n\"); printf(\"分步过程:\\n\"); quick_sort(list3.data,0,list3.length-1); printf(\"最终结果:\\n\"); for(i=0; i 因篇幅问题不能全部显示,请点此查看更多更全内容