习题2.1.2
#include
using namespace std;
void insectionSort(int a[],int len)
{
for(int i=1;ia[j]&&j>=0)//用t来比较而不是用a[i] 因为a[i]会变
{
a[j+1]=a[j];
j--;
}
a[j+1]=t;
}
}
int main()
{
int a[7]={41,25,89,74,32,14,258};
insectionSort(a,7);
for(int i=0;i<7;i++)
{
cout<
2.1.4
#include
using namespace std;
int* add(int a[],int b[],int n)
{
int* c=new int(n+1);
int t;
for(int i=n-1;i>=0;i--)
{
c[i]=a[i]+b[i];//原本的new的c是有值的
}
for(int i=n-1;i>=1;i--)
{
if(c[i]==2)
{
c[i-1]++;
c[i]=c[i]%2;
}
}
if(c[0]==2) c[0]=0;
return c;
}
int main()
{
int a[3]={1,0,1};
int b[3]={0,1,1};
int *c=add(a,b,3);
for(int i=0;i<3;i++)
cout<
2.2.2
void selectSort(int& a[],int len)
{
for(int i=0;imax) //1~len的和
{
max=a[j];
t=j;
}
}
swap(a[i],a[t]); //len
}
//一共用时 3*len*(len-1)/2+1~len的和+1+len+len
// o n^2 无最好和最差之分
}
2.2.3
线性查找
平均情况 (n+1)/2 o n
平均次数是(n+1)/2,不是n/2。
被查找的数是第1个数,则需用第1个数和被查找的数比较,要比较1次。
被查找的数是第2个数,则需用第1个数、第2个数和被查找的数比较,要比较2次。
...
被查找的数是第n个数,则需用第1个数、第2个数、...、第n个数和被查找的数比较,要比较n次。
平均次数为(1+2+...+n)/n=(n+1)/2。
最坏情况 o n
2.3-4 插入排序的递归
void insectionSort(int a[],int len)
{
if(len==1) return;
insectionSort(a,len-1);
int t=a[len-1];
int j=len-2;
while(t>a[j]&&j>=0)
{
a[j+1]=a[j];
j--;
}
a[j+1]=t;
}
T(n)=T(n-1)+o n