设计文档.txt
来自「一个快速排序算法的实现例子」· 文本 代码 · 共 100 行
TXT
100 行
by 耿关辉
===========================================================================================================================
问题描述:
在双向链表上实现快速排序的递归算法。
问题分析:
课本中的快速排序算法并不是用链表来实现递归的目的的,所以要解决以上的问题,就要另外定义相关的数据类型的定义,
并依照快速排序算法的思想来进行程序的实现。
===========================================================================================================================
算法设计思想和实现的方法:
依照原先的问题分析:算法的实现分为以下几个步骤:
(1)相关的数据类型的定义:
TYPE
dpointer=^dnodetype;
dnodetype=RECORD //双向链表的数据结构类型的定义
data:integer; //存储结点的数据,即数据域data
pos:integer;
pri,next:dpointer; //指向前去结点和后继结点指针pri,next
END;
VAR
head,tail,d,i,j,s:dpointer;
h,n,ta,pos:integer;
(2)数据的输入:
writeln('Please input the number of the data'); //输入输入的数据的数目n
readln(n);
writeln('Please input the data'); //开始输入全部的数据
new(d); //建立头结点指针
d^.pri:=nil;
d^.next:=nil;
new(head); //新建头指针,一次读入数据开始建立数据的存储结构双向链表
head^.next:=d;
head^.data:=0;
head^.pos:=0;
for k:=1 to n do
begin
read(da);
new(s);
s^.pri:=nil;
s^.next:=nil;
d^.pos:=k;
d^.data:=da;
d^.next:=s; //相应的指针随位置向后推移
d^.pri:=d;
d:=d^.next;
end;
(3)快速排序算法的实现以及结果的输出:
PROCEDURE quick(i,j,head,tail:dpointer);
//快速排序的基本思想是:首先通过一趟排序将输入的待排序列分割成为独立的两部分,
//使得其中的一部分记录的关键字均比另一部分记录的关键字要小,
//然后运用递归的方法在分别对形成的两个部分进行快速排序,从而达到使整个序列有序。
//本算法在对输入的数据记录进行递归的快速排序,执行本算法之后,会使得待排的序列分割成为两个部分,
//由于递归的方法的应用,从而最终达到快速排序的目的。
temp:=i^.data;
while (i^.pos<j^.pos) do //判断条件:当i^.pos<j^.pos时,执行下列程序段
begin
while (i^.pos<j^.pos) and (j^.data>=temp) do j:=j^.pri; //j指针向前移动
i^.data:=j^.data;
while (i^.pos<j^.pos) and (i^.data<=temp) do i:=i^.next; //i指针向后移动
j^.data:=i^.data;
end;
i^.data:=temp;
pos:=i;
if (i^.pri<>nil) then
begin
ta:=i^.pri;
j:=i^.pri;
j^.next:=nil;
i^.pri:=nil;
i:=head;
if i^.pos=j^.pos then write(i^.data:5)
else quick(i,j,head,ta); //递归过程quick(*,*,*,*)的应用
end;
write(temp:5);
if (pos^.next<>nil) then
begin
i:=pos^.next;
he:=pos^.next;
pos^.next:=nil;
i^.pri:=nil;
j:=tail;
if i^.pos=j^.pos then write(i^.data:5)
else quick(i,j,he,tail); //递归过程quick(*,*,*,*)的应用
end;
ENDP; {quick}
===========================================================================================================================
结果测试实例:
Please input the number of the data:9
Please input the data:
12 54 65 12 75 10 32 151 89
结果:
10 12 12 32 54 65 75 89 151
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?