找回密码
 注册
关于网站域名变更的通知
查看: 340|回复: 1
打印 上一主题 下一主题

《算法导论(第三版)》第八章8.2,计数排序

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2020-3-10 10:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
《算法导论(第三版)》第八章8.2,计数排序
9 g. _2 w" A7 x' M- L由于MATLAB本身语法的限制,MATLAB不存在A(0)这种操作,所以区别于书中的范围规定,修改为:
6 u0 \$ q' r8 U/ c6 |, D$ e8 l计数排序假设n个输入元素中的每一个都是在1~k区间内的一个整数,其中k为某个整数/ |( b+ D0 n6 `1 a: G
main
3 h) M3 V2 Y* ?' i+ i- j& s
  • clear;clc
  • A=[2 5 3 1 2 3 1 3]%测试数组,必须全部为正整数
  • k=5;%MAX(A)
  • A=COUNTING_SORT(A,k)% y6 ?- Z, P, ]

/ X$ ]( J# q$ H5 j* K
- T5 Y7 r+ [6 a2 p% ?
3 X  Y/ q; G7 }. ]2 G8 a3 t, e. |) t  J  O
COUNTING_SORT+ u) m$ o, Z& _' q- P2 D' s; @
  • function [B] = COUNTING_SORT(A,k)%不需要存放的输出B
  • %由于MATLAB不存在C(0)这种操作,所以书中的算法,需要调整为:
  • %计数排序假设n个输入元素中的每一个都是在1~k区间内的一个整数,其中k为某个整数。
  • C=zeros(1,k);%初始A中的相同元素个数为0
  • for j=1:length(A)
  •     C(A(j))=C(A(j))+1;%计算A中相同元素的个数
  • end
  • for i=2:k
  •     C(i)=C(i)+C(i-1);%个数累加,为了区分相同个数,在不同的位置
  • end
  • for j=length(A):-1:1
  •     B(C(A(j)))=A(j);%从后到前挨个存入输出中
  •     C(A(j))=C(A(j))-1;%相同元素计数-1
  • end
  • end, L) T/ g/ Z8 p% [9 W! \# t
6 P' K1 I" g6 F9 r, t, a1 D' e
; l2 G6 i! C$ ~) r7 h1 c8 O
/ j0 U0 G; s, _% Q- k9 a3 E; z

" s% p1 a  t. Y: @) o6 k

该用户从未签到

2#
发表于 2020-3-10 17:52 | 只看该作者
学习一下计数排序,非常感谢楼主分享。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-11-24 13:34 , Processed in 0.140625 second(s), 23 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表