那些年耍过的无赖

事情的开始是这样的,有个网友在问:

题:求一个字符串排序的函数( 积分:30, 回复:32, 阅读:684)
来自:lingm, 时间:2004-04-16 15:26, ID:2563345

然后网友给出了一个测试文件,一个全是大写字母的文件,就是一个巨大的字符串。大家就开始提出各种优化方案,冒泡、快速排序、分区快速排序。大家优化的不亦乐乎。

例如这位网友说:

来自:TYZhang, 时间:2004-04-16 16:29, ID:2563480
为啥全是“冒泡”,来个快速的:
function QuickSortStr(S:String):String;
  procedure QuickSort(L,H:Integer);
  var I,J:Integer;
      X:Char;
  begin
    if L>=H then Exit;
    I:=L;J:=H;X:=S[I];
    while(I<>J) do
    begin
      while (I<J)and(S[J]>X) do Dec(J);
      if I<J then begin S[I]:=S[J]; Inc(I); end;
      while (I<J)and(S[I]<=X) do Inc(I);
      if I<J then begin S[J]:=S[I]; Dec(J); end;
    end;
    S[I]:=X;
    QuickSort(L,I-1);
    QuickSort(I+1,H);
  end;
begin
  QuickSort(1,Length(S));
  Result:=S;
end;

又例如这位网友:

来自:TYZhang, 时间:2004-04-16 16:37, ID:2563528
to hfghfghfg:
   不好意思,刚才的代码有误:
function QuickSortStr(S: string): string;
  procedure QuickSort(L, H: Integer);
  var I, J: Integer;
    X: Char;
  begin
    if L >= H then Exit;
    I := L; J := H; X := S[I];
    while (I <> J) do
      begin
        while (I < J) and (S[J] > X) do Dec(J);
        if I < J then begin S[I] := S[J]; Inc(I); end;
        while (I < J) and (S[I] <= X) do Inc(I);
        if I < J then begin S[J] := S[I]; Dec(J); end;
     end;//
        S[I] := X;
        QuickSort(L, I - 1);
        QuickSort(I + 1, H);
     // end;此处end要上移,否则时间繁杂度增加
  end;
begin
  QuickSort(1, Length(S));
  Result := S;
end;
来自:kouchun, 时间:2004-04-16 16:40, ID:2563536
樓上的巨汁..我的運行到假死了...

这时俺就开始耍无赖了:

 俺提出了一个思路 ,反正就是 A到Z , 26 个字母(这个题目规定的),所以俺不排序了,俺统计一下每个字母出现的次数,然后再输出一下。

function ss(v: string): string;
var
  data: array['A'..'Z'] of integer;
  i: Integer;
  c: char;
  str: string;
begin
  FillChar(data, length(data) * 4, 0);

  for i := 1 to length(V) do
    inc(data[V[i]]);
  result := '';
  for c := 'A' to 'Z' do
    if data[C] > 0 then
      begin
        setLength(str, data[C]);
        FillChar(str[1], data[C], C);
        result := result + str;
      end;

end;

 结果也是很明显的:

统计法 10 毫秒  VS  快速排序 3455 毫秒

来自:kouchun, 时间:2004-04-16 17:18, ID:2563657
狂頂!!狂頂!!狂頂!!狂頂!!狂頂!!狂頂!!

極度佩服hfghfghfg,天生hfghfghfg何生TYZhang,更不用說生我了!![:D]

實測如下: hfghfghfg的方法實在快的無話可說!!我的冒泡法運行的假死了...
来自:hfghfghfg, 时间:2004-04-18 21:30, ID:2566539
to crystal:
  多谢。

ps:
  其实我发这贴就是觉得 很多人 一提到排序,就说快速排序。
根本不考虑 数据 适合什么样的 排序模式。
就本题来说。快速排序一点也不快。

来自:hfghfghfg, 时间:2004-04-16 18:24, ID:2563828

每种排序都是最好的,但是要在适合它的范围。
正如 一个好的统帅只会出现在适合他的战场上。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

月巴月巴白勺合鸟月半

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值