| 
 | 
	
    
 
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册  
 
x
 
《算法导论(第三版)》第八章8.2,计数排序: T- ^( u' J' \3 m 
由于MATLAB本身语法的限制,MATLAB不存在A(0)这种操作,所以区别于书中的范围规定,修改为:+ J) |9 f6 R; D3 v8 Z6 M6 w2 \ 
计数排序假设n个输入元素中的每一个都是在1~k区间内的一个整数,其中k为某个整数 
% {' `4 F4 A* f. Xmain 
2 z- Q& A. a1 x+ w( p0 z, l- clear;clc
 - A=[2 5 3 1 2 3 1 3]%测试数组,必须全部为正整数
 - k=5;%MAX(A)
 - A=COUNTING_SORT(A,k)
 
" J5 [# {, @) [; p1 v; _4 ~  3 r& I: X$ ^% q+ I% l2 A  T 
 
- S% b* R$ H0 Q) a1 e  ?! [# z# {& l: Z. f& c( m9 t1 g5 m# } 
COUNTING_SORT2 p* }4 L7 }* @# ^" J5 O5 k 
- 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
 
% h) O5 b- V1 h5 l' e) o  " F8 s; U. F4 W$ u4 C 
 
* h4 E( i3 H/ l! D3 M9 B, j& ^& V1 g9 w. {- y* o 
2 Y/ G, Q' ?& s  [# J( S. y 
 |   
 
 
 
 |