伪代码计算机流程图排序数组,排序伪代码总结

目录

一.选择排序

时间复杂度为Θ(n²)

算法

输入:n个元素的数组A[1…n]

输出:按非降序排列的数组A[1…n]for  i←1 to n-1

k←i       //设立标志位

for j←i+1 to n     //查找第i小的元素

if A[j]

end for

if k≠i    then 交换A[i]与A[k]

end for

操作方法:首先找到最小元素,将其存放在A[1]中,然后找到剩下的n-1个元素中的最小元素,将其存放在A[2]中,重复此过程直至找到第二大的元素,并将其存放在A[n-1]中

二.插入排序

算法

输入:n个元素的数组A[1…n]

输出:按非降序排列的数组A[1…n]for i←2 to n

x←A[i]

j←i-1

while(j>0) and (A[j]>x)

A[j+1]←A[j]

j←j-1

end while

A[j+1]←x

end for

操作方法:在第i次插入中,要将A[i]插入到已排序的子数组A[1…n-1]中的合适位置上,依次扫描序号从i-1到1的元素,每次都将A[i]和当前位置的元素比较,在扫描的每一步,元素A[1…i-1]大于A[i]都被移到序号更高的一个位置上,然后在合适的位置上插入A[i]

三.快速排序(分治法)

时间复杂度为Θ(n*logn)空间复杂度为Θ(n)

输入:数组A[]low…high]

输出:(1)如有必要,输出按上述描述的重新排列的数组A

(2)划分元素A[low]的新位置w

split算法i←low

x←A[low]     //第一位的元素

for j←low+1 to high    //遍历数组中剩下所有元素

if A[j]≤x    then

i←i+1   //用i指针来从第二个元素开始交换添加较小的元素

if i≠j    then 互换A[i]和A[j]

end if

end for

互换A[low]和A[i]

w←i

return A和w

操作方法:用i指针和j指针交换元素,当算法对所有元素扫描后,用A[i]与主元交换,这样所有小于或等于主元的元素处于它的左边,并且所有大于主元的元素处于它的右边,最后算法将i赋给主元的位置w

quicksort算法

输入:n个元素的数组A[1…n]

输出:按非降序排列的数组A[1…n]

quicksort(A,low,high)if low

SPLIT(A[low…high],w)    //w为A[low]的新位置

quicksort(A,low,w-1)

quicksort(A,w+1,high)

end if

操作方法:子数组A[low…w-1]和A[w+1,high)递归地排序

四.归并排序(分治法)

时间复杂度为Θ(n*logn)空间复杂度为Θ(n)

算法

输入:n个元素的数组A[1…n]

输出:按非降序排列的数组A[1…n]

mergesort(A,1,n)

过程:mergesort(low,high)if low

mid←⌊(low+high)/2⌋

mergesort(A,low,mid)

mergesort(A,mid+1,high)

MERGE(A,low,mid,high)

end if

合并两个有序的表

输入:数组A[1…m]和它的三个索引p,q,r,1≤p≤q≤r≤m,两个子数组A[p…q]和A[q+1…r]各自按升序排列

输出:合并两个子数组A[p…q]和A[q+1…r]的数组A[p…r]

MERGE//B[p…r]是个辅助数组

s←p;t←q+1;k←p

while s≤q and t≤r

if A[s]≤A[t]    then

B[k]←A[s]

s←s+1

else

B[k]←A[t]

t←t+1

end if

k←k+1

end while

if s=q+1    then B[k…r]←A[t…r]

else B[k…r]←A[s…q]

end if

A[p…r]←B[p…r]

  • 3
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值