这段时间刚好有闲暇,想学习一点基础跟算法相关的东西(活络一下脑筋),教材一定要经典,之前随便从单位图书馆借了一本机械工业出版社出版的《算法设计与分析》,说是计算机专业规划教材,看完前40页,书的专业程度暂且不说,毕竟刚开始看。但是书里的错误却实在太多,错别字甚至连基本的公式都出现错误,这严重影响学习进程,学习还要纠错,不要太痛苦,于是果断弃之。然后便找到了,《算法导论》,这本书某东上102,略贵,所以从网上找了本电子版爱戴习题答案,现在将就用着。为了巩固学习效果,想把输出给出伪代码的算法实现之后贴到这,做个备份,有需要的人也可以各取所需。
排序算法之插值排序算法(升序)
void InsertionSortUp(int [] SortArrary)
{
int i=0,l=0,key=0;
for(j=1;j<SortArray.Length;j++)
{
key=SortArrary[j];
i=j-1;
while(key<SortArray[i]&&i>=0)
{
SortArrary[i+1]=SortArray[i];
i--;
}
SortArrary[i+1]=key;
}
}
合并排序算法
数组合并
void Merge(int[] SortArrary,int p,intq,int r)
{
int n1=q-p+1;
int n2=r-q;
int i,j;
int [] L=new int[n1+1],R=new int [n2+1];
for(i=0;i<n1;i++)
L[i]=SortArrary[p+i];
for(j=0;j<n2;j++)
R[j]=SortArrary[q+i+1];
L[n1]=1000000;
L[n2]=1000000;
i=0;j=0;
for(int k=p;k<=r;k++)
{
if(L[i]<=R[j])
{
SortArrary[k]=L[i];
i++;
}
else
{
SortArrary[k]=R[j];
j++;
}
}
}
合并分组算法之分组
void Merge_sort(int [] SortArrary,int p,int r)
{
int q=0;
if(p<r)
{
q=(p+r)/2;
Merge_sort(SortArrary,p,q);
Merge_sort(SortArrary,q+1,r);
Merge(SortArrary,p,q,r);
}
}