CountingSort(A[1...n]): initialize arrays C[0,..,U-1],B[1..n] for k = 0,..,U-1:C[k]=0 for i = 1,..,n C[key(A[i])]++ for k = 1,..,U-1: C[k]=C[k]+C[k-1] // 这里因为要前缀和,所以从1开始 for i=n,..,1: B[C[key(A[i])]]:=A[i] C[key(A[i])]-- A[1..n]:=B[1..n]
LSDRadixSort(A[1..n]): for i=0,..,d-1: redefine key(x):= (x div B^i) mod B //这里是排整数,排字符串就是 x_i-'a' CountingSort(A)
rebalance(Handle v): if hidff(v)=2: w:=v->left if hdiff(w)=-1 v->left:=rotateleft(w) return rotateright(v) else if hdiff(v)=-2: w:=v->right if hdiff(w)=1: v->right=rotateright(w) return rotateleft(v) else: return v