鱼C论坛

 找回密码
 立即注册
查看: 3123|回复: 3

冒泡排序V2的问题

[复制链接]
发表于 2012-3-9 11:28:29 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
大家好,我按视频上代码自己做了个冒泡排序V2发现一个问题,输入33 23 4这样最后一位是个位数的时候排序结果会把变成23 33而把4给弄没了,哪位朋友给说说问题出在哪啊
我在清空temp前加上ShowMessage(temp)试了下发现在这生成数组的时候就已经把最后的4给弄没了。
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Buttons;

type
  TForm1 = class(TForm)
    BitBtn1: TBitBtn;
    Edit1: TEdit;
    Label1: TLabel;
    procedure BitBtn1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.BitBtn1Click(Sender: TObject);
var
  i,j,k: Integer;
  n,l,m: Integer;
  str: String;
  num: Array of Integer;
  temp: String;
  
begin
  str:= Trim(Edit1.Text);    //去掉首尾空格
  SetLength(num, Length(str));
  j:= 1;
  i:= 1;

  While ( i < Length(str) ) do
  begin
    While ( (str[i] <> #32) And (str[i] <> #0) ) do
    begin
      temp:= temp + str[i];
      i:= i + 1;
    end;

    num[j]:= StrToInt(temp);
    j:= j + 1;
    i:= i + 1;
    temp:= '';
  end;
  //下边是进行冒泡排序算法,事实上应该封装成函数更好
  n:= j;
  For l:=1 to n-1 do
  begin
    k:= n - l;
    For j:=1 to k do
    begin
      If (num[j] < num[j+1]) then
      begin
        m:= num[j];
        num[j]:= num[j+1];
        num[j+1]:= m;
      end;
    end;
  end;

  Edit1.Text:= '';
  For l:= n-1 DownTo 1 do
    Edit1.Text:= Edit1.Text + IntToStr(num[l]) + ' ';

end;

end.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-3-9 22:59:23 | 显示全部楼层
新人 看不懂啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2012-3-12 12:01:05 | 显示全部楼层
哪位朋友给看下啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-3-21 11:42:30 | 显示全部楼层
While ( i < Length(str) ) do
这里应该是<=的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-28 23:53

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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