找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 30|回复: 0

基数排序算法

[复制链接]

351

主题

341

回帖

2433

积分

管理员

积分
2433
发表于 2025-6-17 22:00:18 | 显示全部楼层 |阅读模式
// Radix Sort
(*
先找出数组中最大元素,确定基数(几位数);
然后对元素从最低位(个位)开始分类,依次放入 0~9 容器中,再按顺序取出;
后按高一位(十位)分类,取出;直至最高位;最后按顺序取出,排序结束。
*)
// 适用范围:正整数
//

#sort_temp := #Sort_IN;

#max := #sort_temp[0];
FOR #i := 0 TO #Length - 1 DO
    IF #sort_temp[#i] > #max THEN
        #max := #sort_temp[#i];     // 找出数组中的最大值
    END_IF;
END_FOR;

#exp := 1;
WHILE #max / #exp > 0 DO   // 最大数位数决定操作次数

    FOR #i := 0 TO 9 DO        // 清空容器
        FOR #j := 1 TO 10 DO
            #bucket[#i, #j] := 0;
        END_FOR;
    END_FOR;
    FOR #i := 0 TO 9 DO        // 清空计数器
        #num[#i] := 1;
    END_FOR;

    FOR #i := 0 TO #Length - 1 DO
        #no := (#sort_temp[#i] / #exp) MOD 10;       // 基数
        #bucket[#no, #num[#no]] := #sort_temp[#i];
        #num[#no] := #num[#no] + 1;                  // 相同基数的元素个数
    END_FOR;
    #k := 0;
    FOR #i := 0 TO 9 DO
        FOR #j := 1 TO 10 DO
            IF #bucket[#i, #j] > 0 THEN
                #sort_temp[#k] := #bucket[#i, #j];   // 按顺序取出
                #k := #k + 1;
            END_IF;
        END_FOR;
    END_FOR;
    #exp := #exp * 10;    // 更高位基数
END_WHILE;

#Sort_OUT := #sort_temp;


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|笔记

GMT+8, 2025-7-7 12:33 , Processed in 0.037559 second(s), 19 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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