今天刚考完数据结构,考完后觉得有些地方还是没做好,回头想想,当时觉得都理解了,毕竟只考两章的内容考完后才发现有些地方还是没理解完全。
算法1:在数组a[1...n]中设置“监视哨”,查找关键字key,成功返回1,否则返回0;
int Search(int a[],int key)
{
a[0]=key; //监视哨a[0]
int i=n;
while(a[i]!=key)i--;
return i; //不管查找成功与否,返回值都是i
}
/*一个return 语句就行,当时也怪自己没好好看书,觉得只是这么短短几行挺简单的,就一眼跳了过去;哎~哪知道考试时不晓得“监视哨”的作用了,就写成了一个普通的查找循环了,晕~*/
算法2:对数组a[1...n]中给定的小标s用堆排序排列成大顶堆
void HeapAdjust(int a[],int s,int n)
{
for(int i=2*s;i<=n;i=i*2){
if(i<n&&a[i]<a[i++])i++;
if(a[s]<a[i]){
a[0]=a[s]; //若子节点比父节点大,则交换
a[s]=a[i];
a[i]=a[0];
s=i; //注意这一步,比较后子节点i的值要付给s,使之在一下比较中依然保持s与i的父子节点关系
}
}
}
/*当时写到最后的时候,看别人都交卷都差不多了,一时心急,貌似堆调整的时候,小标交换写反了 i=s ?在晕~一次,学习了,不管怎样,心态还是要好啊,fighting~*/