delphi 排序算法
时间: 2023-06-18 13:03:21 浏览: 54
Delphi 提供了多种排序算法,包括冒泡排序、选择排序、插入排序、快速排序等。下面是一个快速排序的示例代码:
```delphi
procedure QuickSort(var A: array of Integer; iLo, iHi: Integer);
var
Lo, Hi, Pivot, T: Integer;
begin
Lo := iLo;
Hi := iHi;
Pivot := A[(Lo + Hi) div 2];
repeat
while A[Lo] < Pivot do Inc(Lo);
while A[Hi] > Pivot 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;
```
这个算法使用递归的方式进行排序,从数组的中间选取一个元素作为枢轴值,将小于枢轴值的元素放在枢轴值的左边,大于枢轴值的元素放在右边,然后对左右两个子数组分别进行排序。时间复杂度为 O(n log n)。
相关问题
delphi 冒泡排序
以下是 Delphi 冒泡排序的示例代码:
```
program BubbleSort;
{$APPTYPE CONSOLE}
uses
SysUtils;
const
MaxArraySize = 100;
type
TArray = array[1..MaxArraySize] of Integer;
var
A: TArray;
N: Integer;
procedure ReadData;
var
I: Integer;
begin
Write('Enter the size of the array (1-100): ');
ReadLn(N);
if (N < 1) or (N > MaxArraySize) then
raise Exception.Create('Invalid array size');
for I := 1 to N do
begin
Write('Enter element ', I, ': ');
ReadLn(A[I]);
end;
end;
procedure BubbleSort(var A: TArray; N: Integer);
var
I, J, Temp: Integer;
begin
for I := N downto 2 do
for J := 1 to I - 1 do
if A[J] > A[J + 1] then
begin
Temp := A[J];
A[J] := A[J + 1];
A[J + 1] := Temp;
end;
end;
procedure WriteData;
var
I: Integer;
begin
WriteLn('Sorted array:');
for I := 1 to N do
WriteLn(A[I]);
end;
begin
try
ReadData;
BubbleSort(A, N);
WriteData;
except
on E: Exception do
WriteLn(E.Message);
end;
end.
```
该程序首先从用户处读取一个整数数组,然后使用冒泡排序算法对其进行排序,最后将排序后的数组打印到控制台上。冒泡排序算法的核心代码位于 `BubbleSort` 过程中,其中使用两个嵌套的循环来比较相邻的元素并进行交换,以便将最大的元素逐渐“冒泡”到数组的末端。
写一段起泡排序的delphi语言算法
### 回答1:
program BubbleSort(var a: array of Integer);
var
i, j, temp: Integer;
begin
for i := Low(a) to High(a) do
begin
for j := Low(a) to High(a) - 1 do
begin
if a[j] > a[j + 1] then
begin
temp := a[j];
a[j] := a[j + 1];
a[j + 1] := temp;
end;
end;
end;
end;
程序 BubbleSort(var a:整数数组);
var
i, j, temp: Integer;
begin
for i := Low(a) to High(a) do
begin
for j := Low(a) to High(a) - 1 do
begin
if a[j] > a[j + 1] then
begin
temp := a[j];
a[j] := a[j + 1];
a[j + 1] := temp;
end;
end;
end;
end;
### 回答2:
起泡排序是一种简单直观的排序算法,它通过多次遍历待排序序列,每次比较相邻的两个元素的大小,并交换位置,直到整个序列有序。下面是使用Delphi语言编写的起泡排序算法:
```
procedure BubbleSort(var arr: array of Integer);
var
i, j, temp: Integer;
begin
for i := Low(arr) to High(arr)-1 do
begin
for j := Low(arr) to High(arr)-i-1 do
begin
if arr[j] > arr[j+1] then
begin
temp := arr[j];
arr[j] := arr[j+1];
arr[j+1] := temp;
end;
end;
end;
end;
```
在这段代码中,我们使用了两层循环。外层循环`i`遍历整个序列,内层循环`j`用于比较相邻元素的大小。如果前一个元素大于后一个元素,就交换它们的位置。通过多次循环,最大的元素会跑到序列的最后,排序就完成了。
该算法的时间复杂度为O(n^2),其中n为序列的长度。需要注意的是,这是一种稳定的排序算法,即相等元素的相对位置不会发生变化。
### 回答3:
起泡排序(Bubble Sort)是一种简单的排序算法,通过不断交换相邻的元素将最大(或最小)的元素逐渐冒泡到数组末尾(或数组首部),然后再从剩余的元素中重复这个过程,直到整个数组有序。
以下是使用Delphi语言实现起泡排序算法的代码:
```
procedure BubbleSort(var arr: array of Integer; n: Integer);
var
i, j, temp: Integer;
begin
for i := 0 to n - 1 do
begin
for j := 0 to n - i - 2 do
begin
if arr[j] > arr[j + 1] then
begin
// 交换相邻元素的位置
temp := arr[j];
arr[j] := arr[j + 1];
arr[j + 1] := temp;
end;
end;
end;
end;
```
上述代码中,`arr`是待排序的数组,`n`是数组的长度。算法使用两层循环,外层循环控制一共需要执行多少轮排序,内层循环用于比较并交换相邻元素的位置。
我们可以先假设数组是从小到大排序的,每次内层循环都会比较相邻元素的值,如果前一个元素大于后一个元素,则交换它们的位置。通过这样的比较和交换,最大的元素会逐渐“冒泡”到数组的末尾。经过一轮内层循环后,最大的元素就会到达正确的位置。然后外层循环继续进行下一轮,内层循环再次遍历未排序的元素。
最终,经过n-1轮的排序,整个数组会按照从小到大的顺序排列。