急求一排序法!!!!谢谢!!(50分)

  • 主题发起人 主题发起人 topboy
  • 开始时间 开始时间
T

topboy

Unregistered / Unconfirmed
GUEST, unregistred user!
要求程序简单,排序算法快!!!

比如有一数组 a=array[1..8]of string;
先转换成大写,再由小到大排序。。

谢谢!在线等待!!
 
晕,去看数据结构!呵呵!简单的方法,冒泡呀!呵呵!
 
急用!没有书!
 
var
a:array of string;
newA:Array of string;//排序后的新数组
i,j,highA,Maxnum:integer;i,j :计数变量; highA :动态数组上限 ; Maxnum:已经取值的数组
temp:string;//临时交换字符变量
begin
setlength(a,8);
setlength(NewA,8);
j:=0;
//init a
a[0]:=UpperStr(Pchar('asdfds'));
..
//
highA:=high(a);
for j:=0 to high(a) do
begin
//
Maxnum:=HighA+1;
for i:=0 to Maxnum do
begin
temp:='';
if a<>Maxnum then
begin
if a>temp then
begin
temp:=a;
Maxnum:=i;
end;
end;
end;
end;

NewA[j]:=temp;

//
end;
//
{加入处理 NewA数组代码}
//
// 动态数组释放
a:=nil;
newA:=nil;

end;

没调试请见谅,但算法如此
 
排序法有 冒泡法、选择法、快速法,其中以快速法最快。给你一个快速法的代码。
之前你先转换大写。

procedure Sort(var A: array of string);
procedure QuickSort(var A:array of string;iLo, iHi: Integer);
var
Lo, Hi: Integer;
Mid, T: string;
begin
Lo := iLo;
Hi := iHi;
Mid := A[(Lo + Hi) div 2];
repeat
while A[Lo] < Mid do Inc(Lo);
while A[Hi] > Mid do Dec(Hi);
if Lo <= Hi then
begin
T := A[Lo];
A[Lo] := A[Hi];
A[Hi] := T;
Inc(Lo);
Dec(Hi);
end;
until Lo > Hi;
if Hi > iLo then QuickSort(A, iLo, Hi);
if Lo < iHi then QuickSort(A, Lo, iHi);
end;

begin
QuickSort(A, Low(A), High(A));
end;
 
二分法
很快 的
 
这么少的数据随便用一种排序方法都可以。

procedure TForm1.Button2Click(Sender: TObject);
const N=8
var
a:array[1..N]of string;
i,j,t:integer;
s:string;
begin
for i:=1 to N do a:=uppercase(a);

for i:=1 to N-1 do
begin
t:=i;
for j:=i+1 to N do
if a[j]<a[t] then t:=j;
if t<>i then
begin
s:=a;
a:=a[t];
a[t]:=s;
end;
end;
end;
 
后退
顶部