您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 项目/工程管理 > 数据结构C语言冒泡排序和直接插入排序实验报告
一、实验目的1.掌握常用的排序方法,并用高级语言实现排序算法。2.理解排序的定义和各种排序的特点。3.了解排序过程及依据的原则,并了解各种排序方法的时间复杂度分析。二、实验任务1.设计一待排序的线性表以顺序存储结构存储,试写出冒泡排序和直接插入排序算法。三、程序流程图否否是是开始线性表指针p定义循环体i,ji=2i=lastelem[0]elem[j]elem[0]=elem[i]j=i-1elem[j+1]=elem[j]j--elem[j+1]=elem[0]结束i++直接插入排序流程图四、测试过程及结果否否否是是是开始线性表指针p定义循环变量i,j定义交换变量x定义循环标志flagflag=0j=1i=1ilast&&flagj=last-ielem[j]elem[j+1]x=elem[j]elem[j]=elem[j+1]elem[j+1]=xflag=1结束冒泡排序流程图五、总结1.程序特点:最小化、模块化、for循环。2.直接插入排序特点:双循环,从第二项起执行n-1趟,每趟开始将第i项赋给第0项作为循环终点,每趟最大执行i-1次。每趟将前i+1项排序3.冒泡排序特点:双循环,从第一项起最大执行n-1趟,每趟开始将循环符号flag置零。每趟从第一项起,执行n-i次。每趟将第i大的项移到第n-i+1位。附录程序清单//直接插入排序#defineMAXLEN100#includestdio.hstructsqlisttp{intelem[MAXLEN];intlast;};sqlisttp*create(){inti;sqlisttpv;scanf(%d,&v.last);for(i=1;i=v.last;i++)scanf(%d,&v.elem[i]);return&v;}voidprint(sqlisttp*p){inti;for(i=1;i=p-last;i++)printf(%d,p-elem[i]);printf(\n%d\n,p-last);}voidinsertsort(sqlisttp*p){inti,j;for(i=2;i=p-last;i++){p-elem[0]=p-elem[i];for(j=i-1;p-elem[0]p-elem[j];j--)p-elem[j+1]=p-elem[j];p-elem[j+1]=p-elem[0];}}voidmain(){printf(直接插入排序\n);sqlisttpv=*create();insertsort(&v);print(&v);}//冒泡排序#defineMAXLEN100#includestdio.hstructsqlisttp{intelem[MAXLEN];intlast;};sqlisttp*create(){inti;sqlisttpv;scanf(%d,&v.last);for(i=1;i=v.last;i++)scanf(%d,&v.elem[i]);return&v;}voidprint(sqlisttp*p){inti;for(i=1;i=p-last;i++)printf(%d,p-elem[i]);printf(\n%d\n,p-last);}voidbubblesort(sqlisttp*p){inti,j,x,flag;for(i=1;(ip-last)&&flag;i++){flag=0;for(j=1;j=p-last-i;j++)if(p-elem[j]p-elem[j+1]){x=p-elem[j];p-elem[j]=p-elem[j+1];p-elem[j+1]=x;flag=1;}}}voidmain(){printf(冒泡排序\n);sqlisttpv=*create();bubblesort(&v);print(&v);}
本文标题:数据结构C语言冒泡排序和直接插入排序实验报告
链接地址:https://www.777doc.com/doc-4620761 .html