基于内容精简、重点突出、便于理解的这些优点,选择中文伪码来记录。
?
当数组有元素时(left<=right)循环:
???? ? ? ?若查找值小于中位数,则查找左半边数组;
???? ? ? ?若查找值大于中位数,则查找右半边数组;
? ? ? ? ? 否则查找值等于中位数,即找到。
返回未找到。
_______________________________________________
?
? ??
当数组多于一个元素时(left<right):
???? ? ? ?递归排序左半边(含中间);
???? ? ? ?递归排序右半边;
???? ? ? ?合并两边。
_______________________________________________
?
?
当数组多于一个元素时(left<right):
???? ? ? ?q = Partion();
???? ? ? ?递归排序q左边;
???? ? ? ?递归排序q右边。
?
Partion:
? ? ? ? ?选择第一个记录作为枢轴,值为key;
? ? ? ? ?当left<right时循环:
? ????????????? ? ?right从右到左,直至比key小时停下,并设置a[left]?=?a[right];
? ????????????? ? ?left从左到右,直至比key大时停下,并设置a[right]?=?a[left];
???? ????a[left]?= key;
???? ? ??返回left。
_______________________________________________
?
?
从最后一个非叶节点(length/2-1)往前循环:
???? ? ??全范围length内AdjustHeap调整当前节点。
由后往前循环(i=length-1;i>0;--i):
???? ? ? 当前节点与根节点交换;
???? ? ? 在范围i内,AdjustHeap调整根节点;
?
AdjustHeap:
???? ? ? 若当前节点有孩子,循环:
???? ???? ????? ? ?选择一个较大的孩子;
???? ???? ????? ? ?若该孩子比当前节点大,则交换并将当前节点设为该孩子,否则结束
_______________________________________________
记录一些重要算法的思路(持续整理)
原文:http://xingbinice.iteye.com/blog/2225540