从今天开始我就要学习写伪代碼了。都说实践是最好的老师所以我希望通过对算法的描述来学习伪代码。
百度百科上介绍伪码(Pseudocode)是一种算法描述语言。使用伪码嘚目的是使被描述的算法可以容易地以任何一种编程语言(PascalC,Java等)实现
归并三种排序伪代码是分治法(Divide and conquer)一个非常典型的应用,时间复杂喥为O(nlogn)是一种稳定三种排序伪代码的算法。
它的主要思想是将一个序列不断分成一个个子序列直到不能再分,然后再分别比较不同子序列第一个元素的大小如果想要一个从小到大的序列,则把小的放在目标序列前面然后用下一个元素和未被放进工作序列的元素相比较,重复这个过程直到所有元素都被排好序,再放回原序列
这是维基百科上归并三种排序伪代码的示例图片。
/*数组a[]是原始数组数组b[]是目标数组*/
/*通过递归把要三种排序伪代码的子序列分的足够小*/
分割与归并(数组 a[],起始位置,结束位置,数组 b[]){
中间位置 = (起始位置+结束位置)/2
分割與归并(数组 a[],起始位置,中间位置,数组 b[])
分割与归并(数组 a[],中间位置,结束位置,数组 b[])
归并(数组 a[],起始位置,中间位置结束位置,数组 b[])
拷贝(数組 a[],起始位置结束位置,数组 b[])
归并(数组 a[],起始位置中间位置,结束位置数组 b[]){
//当i0没有超过中间位置时,有两种情况要将a[i0]复制到b[j]上:
//1.i1已经超过结束位置只要把剩下的复制过来就好;
/*将已经排好序的数组b复制回数组a的相应位置*/
拷贝(数组 a[],起始位置结束位置,数组 b[]){
这样a僦被排好序了其他不是数组的实现也是类似的。