case blue alK<->a[k] k-;∥/这里没有计+;语句是为了防止交换后a仍为蓝色的情况 i//Flag A 分析这个算法中设立了三个指针其中j表示当前元素以前的元素全部为红 色k以后的元素全部为蓝色这样,就可以根据j的颜色,把其交换到序列的前部或 者后部 10.3 void Linked List Select Sort( inked List&L∥单链表上的简单选择排序算法 for(p=L p->next->next p=p->next) q-p- for(r=q,s=qr->next;r=r->next)∥在q后面寻找元素值最小的结点 if(r->next->data<x) x=r->next->data ifs!=q)找到了值比q>data更小的最小结点s>next p->next=s->next; s->next=q >next; q->next=p->next->next p->next-next-t }/交换q和s>next两个结点 i/fo B//Linked List Select Sort void Build Heap(Heap&H, int n)从低下标到高下标逐个插入建堆的算法 for(=2<n;i++) ∥此时从Hr[1到Hr[i1]已经是大顶堆 whil(jl-1)∥把H插入 k=j2 if(H rl.key>H rk].key) H. rok->H r[k]:case BLUE: a[j]<->a[k]; k--; //这里没有 j++;语句是为了防止交换后 a[j]仍为蓝色的情况 } }//Flag_Arrange 分析:这个算法中设立了三个指针.其中,j 表示当前元素;i 以前的元素全部为红 色;k 以后的元素全部为蓝色.这样,就可以根据 j 的颜色,把其交换到序列的前部或 者后部. 10.33 void LinkedList_Select_Sort(LinkedList &L)//单链表上的简单选择排序算法 { for(p=L;p->next->next;p=p->next) { q=p->next;x=q->data; for(r=q,s=q;r->next;r=r->next) //在 q 后面寻找元素值最小的结点 if(r->next->data<x) { x=r->next->data; s=r; } if(s!=q) //找到了值比 q->data 更小的最小结点 s->next { p->next=s->next;s->next=q; t=q->next;q->next=p->next->next; p->next->next=t; } //交换 q 和 s->next 两个结点 }//for }//LinkedList_Select_Sort 10.34 void Build_Heap(Heap &H,int n)//从低下标到高下标逐个插入建堆的算法 { for(i=2;i<n;i++) { //此时从 H.r[1]到 H.r[i-1]已经是大顶堆 j=i; while(j!=1) //把 H.r[i]插入 { k=j/2; if(H.r[j].key>H.r[k].key) H.r[j]<->H.r[k]; j=k; }