基于内容精简、重点突出、便于理解的这些优点,选择中文伪码来记录。
- 二分查找
当数组有元素时(
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];
right从右到左,直至比key小时停下,并设置a[left] = a[right];
left从左到右,直至比key大时停下,并设置a[right] = a[left];
a[left] = key
;
返回left。
_______________________________________________
- 堆排序
从最后一个非叶节点(
length/2-1)往前循环:
全范围length内
Adjust
Heap调整当前节点。
由后往前循环(
i=length-1;i>0;--i):
当前节点与根节点交换;
在范围i内,AdjustHeap调整根节点;
AdjustHeap:
若当前节点有孩子,循环:
选择一个较大的孩子;
若该孩子比当前节点大,则交换并将当前节点设为该孩子,
否则结束
_______________________________________________