计算机软件技术_作业1.pptVIP

  • 20
  • 0
  • 约1.96千字
  • 约 8页
  • 2016-12-21 发布于贵州
  • 举报
第一章 算法 1.2 设给定三个整数a,b,c,试写出寻找其中数的一个算法。并分析在平均情况与最坏情况下,你的算法分别要作多少次比较? int mid(int a, int b, int c, int m) { m=a; if (m≥b) { if (m≥c) { if (b≥c) m=b; else m=c; } } else { if(m≤c) then { if(b≥c) m=c; else m=b; } } return m; } 1.3 利用减半递推技术,写出求长度为n的数组中最大元素的递归算法。设n=2k,其中k≥1。 int maxa(int a[], int m, int n) { int d,d1,d2; if ( m==n ) return( a[m-1] ); else { d1 = maxa( a,m,(m+n)/2 ); //求数组中前半部分的最大值 d2 = maxa( a,(m+n)/2+1,n ); } //求数组中后半部分的最大值 if (d1d2) d=d1; else d=d2; return(d); } 作业3:计算如下算法的平均时间复杂度以及最好、最坏情况下的时间复杂度(只有“比较运算”为基本运算) 2.2:顺序存储结构下逆转线性表的算法,要求使用最少的附加空间。 void inverse(int a[],int n) { int temp; for(int k=0;k=(n-1)/2;k++) {temp=a[k];a[k]=a[n-1-k]; a[n-1-k]=temp;} } 2.3:比较有序表的大小。 int comp(int a[],int n,int b[],int m) { int i,j; i=0; if(nm) return 1; while( (in) (a[i]= =b[i]) ) i++; //比较相等元素 if(i= =n) { if(n= =m) return 0; //a与b相等 else return -1; //a小于b } else { j=i; while( (jn) (a[j]b[j] ) j++; //比较不相等元素 if( j==n) return -1; //a小于b else return 1; //a大于b } } 作业4:在顺序存储结构中删除值为x的元素的算法。 int delist(int a[],int n, int x) { int i=0; while(a[i]!=x in )i++; if(i==n) return -1; //删除失败 else { for(int j=i+1; jn;j++) a[j-1]=a[j]; n--; return 1; //删除成功 } } * 8 7 6 5 4 3 2 1 54 21 33 29 85 78 16 35 4 3 2 1 85 78 16 35 8 7 6 5 54 21 33 29 2 1 16 35 4 3 85 78 6 5 33 29 8 7 54 21 1 35 2 16 3 78 4 85 5 29 6 33 7 21 8 54 MAXA(1,8) MAXA(1,4) MAXA(5,8) MAXA(1,2) MAXA(3,4) MAXA(5,6) MAXA(7,8) MAXA(1,1) MAXA(2,2) …… ……MAXA(8,8) /*求最大最小值*/ void maxmin(int A[],int n) { int i,max,min; max=A[0];min=A[0]; for(i=1;in;i++) if(A[i]max)max=A[i]; else if(A[i]min)min=A[i]; } *

文档评论(0)

1亿VIP精品文档

相关文档