Delphi 希尔排序

RAD Studio 10.2.3 测试√


在这里插入图片描述

耗时基本都是将内容输出到Memo中的耗时


varmArr: TArray<Integer>;a, b: Integer;i, j: Integer;mTime: TDateTime;mCnt: Integer;
beginGenerateRandomArray(mArr, 100, 8, True);Memo_Log.Lines.Add('<=====原始顺序=====');ArrToMemo(mArr);Memo_Log.Lines.Add('=====原始顺序=====>');mTime := Now;mCnt := 0;// 以数组一半的长度为比较间隔单位(步长)a := Trunc(Length(mArr) / 2);while a > 0 dobegin// 下面两个循环就是将数组按照步长进行分组后执行插入排序for i := a to Length(mArr) - 1 dobegin// i 的遍历从第一个步长开始一直到数组的末尾j := i;while (j >= a) and (mArr[j - a] > mArr[j]) dobegin// 这个里面就类似从 j 的位置开始往前按照步长进行比较// 如果与同组前一位的数进行比较不同调换值,那么就直接不用进来,假设前面都是已经排好序的值// 知道出现需要调换的,然后再按照组进行向前位移比较,一直到不满足调换的条件b := mArr[j];mArr[j] := mArr[j - a];mArr[j - a] := b;// 只跟当前组进行比较j := j - a;end;// 打印从第一步开始的每一次数据变更记录ArrToMemo(mArr);end;Inc(mCnt);Memo_Log.Lines.Add('<=====第' + IntToStr(mCnt) + '轮计算后=====');ArrToMemo(mArr);Memo_Log.Lines.Add('=====第' + IntToStr(mCnt) + '轮计算后=====>');// 每次遍历将其比较间隔(步长)缩短一半a := Trunc(a / 2);end;Memo_Log.Lines.Add('排序耗时 ' + IntToStr(MilliSecondsBetween(Now, mTime)) + ' 毫秒');Memo_Log.Lines.Add('<=====希尔排序后顺序=====');ArrToMemo(mArr);Memo_Log.Lines.Add('=====希尔排序后顺序=====>');
end;

一点点笔记,以便以后翻阅。


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部