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

希尔排序算法

[复制链接]

351

主题

341

回帖

2433

积分

管理员

积分
2433
发表于 2025-6-17 21:59:12 | 显示全部楼层 |阅读模式
// Shell's Sort
(*
插入排序,缩小增量排序
把数组元素按下标的一定增量分组,对每组使用直接插入排序算法排序;
随着增量逐渐减少,每组包含的元素越来越多,当增量减至1时,排序结束。
*)

#len := 10;
#gap := 10/2;
#sort_temp := #Sort_IN;

WHILE #gap > 0 DO
    FOR #i := 0 TO #gap - 1 DO
        FOR #j := #i + #gap TO #len - 1 BY #gap DO   // 插入排序
            #k := #j - #gap;
            WHILE #k >= 0 AND ((#Asc_Des AND #sort_temp[#k] > #sort_temp[#k + #gap]) OR (NOT #Asc_Des AND #sort_temp[#k] < #sort_temp[#k + #gap])) DO
                #temp := #sort_temp[#k];
                #sort_temp[#k] := #sort_temp[#k + #gap];
                #sort_temp[#k + #gap] := #temp;
                #k := #k - #gap;
                IF #k < 0 THEN
                    EXIT;
                END_IF;
            END_WHILE;
        END_FOR;
    END_FOR;
    #gap := #gap / 2;    // 增量减半
END_WHILE;

#Sort_OUT := #sort_temp;


回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-7 13:14 , Processed in 0.043812 second(s), 19 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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