Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.05.2010, 12:29   #1
Brabus
Пользователь
 
Регистрация: 25.09.2009
Сообщений: 81
По умолчанию неправильно работает сортировка

у меня задача с шейкерной сортировкой. проблема заключается в том, что с файлами которые она сама создает всё работает хорошо. файл создается по приципу:
первая строка - количество элементов
вторая строка - элементы через пробел
например
100
46 22 6 8 3 2 45 78 3...
а с файлами, которые я создаю он сортирует неправильно
например
4
1 2 3 4
он сортирует как
2 - это как бы отсортированная строка 1 2 3 4
8 - количество проходов
почему так происходит? помогите разобраться пожалуйста

Код:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Edit1: TEdit;
    procedure Button3Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  Mas:=LoadList;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  GenOut(SSort1(Mas), Mas);
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
  GenList(StrToInt(edit1.Text) );
end;

end.
Код:
unit Lib;

interface
type
  TDinMas=array of Integer;
procedure GenList(ColElem: Integer);
function LoadList:TDinMas;
procedure GenOut(Oper:Integer; var Mas:TDinMas );
function SSort1 (var Mas: TDinMas): Integer;
var
  Mas:TDinMas;
implementation
uses
  Sysutils;

procedure GenList(ColElem: Integer);
var
  f: TextFile;
  i: Integer;

begin
  assignFile(f,'InputDates\Input.txt');
  randomize;
  Rewrite(f);
  WriteLn(f, IntToStr(ColElem));
  for i:=1 to ColElem do
    Write(f,IntToStr(Random(1000))+' ');
  closeFile(f);
end;

function LoadList:TDinMas;
var
  f: TextFile;
  Size, i:Integer;
begin
  assignfile(f, 'InputDates\Input.txt');
  Reset(f);
  if IoResult=0 then
  begin
    ReadLn(f,size);
    SetLength(result, size);
    for i:=0 to Size-1 do
      Read(f, Result[i]);
    CloseFile(f);
    end;
end;

procedure GenOut(Oper:Integer; var Mas:TDinMas );
var
  f:TextFile;
  i: Integer;
begin
  assignFile(f,'OutputDates\Output.txt');
  Rewrite(f);
  for i:=0 to High(Mas) do
    Write(f,IntToStr(Mas[i])+' ');
  WriteLn(f);
  Write(f, Oper);
  closeFile(f);
end;

procedure cheng(var var1 ,var2:Integer);
var
  i: Integer;
begin
  i:=var1;
  var1:=var2;
  var2:=i;
end;


function SSort1 (var Mas: TDinMas): Integer;
var  j,left,right: integer;
     last        :integer;
begin
  result:=0;
  left:=0; right:=High(Mas); last:=High(Mas);
  repeat
    for j:=right downto left do begin
    result:=result+1;
    if Mas[j-1]>Mas[j] then begin
      Result:=Result+1;
      cheng(Mas[j], Mas[j-1]);
         last:=j
      end;
    end;
    left:=last+1;
    for j:=left to right do begin
      Result:=Result+1;
      if Mas[j-1]>Mas[j] then begin
        Cheng(Mas[j], Mas[j-1])
      end;
        last:=j
      end;

    right:=last-1;
  until left>right;
end;

end.

Последний раз редактировалось Brabus; 30.05.2010 в 12:32.
Brabus вне форума Ответить с цитированием
Старый 30.05.2010, 14:25   #2
Brabus
Пользователь
 
Регистрация: 25.09.2009
Сообщений: 81
По умолчанию

я уж всю голову сломал, не могу найти
Brabus вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
sscanf() неправильно работает BioS Общие вопросы C/C++ 7 06.02.2010 22:36
Неправильно работает WinExec? TwiX Общие вопросы Delphi 2 26.11.2009 21:07
Неправильно работает поиск Власов А.С. БД в Delphi 5 12.10.2009 05:59
Скрипт неправильно работает aleksa76 JavaScript, Ajax 4 21.05.2008 17:47
Запрос неправильно работает... yulia БД в Delphi 0 27.05.2007 20:41