武汉软件工程职业学院《数据结构讲义》第22讲-内部排序(2)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

武汉软件工程职业学院《数据结构讲义》第22讲-内部排序(2)

教学重点:

交换排序算法和选择排序的算法

教学难点:

交换排序算法和选择排序的算法的设计 授课内容

6.2.2 交换排序

1.冒泡排序

冒泡排序(Bubble sort)是一种人们熟悉的、最直观的交换排序方法。在排序过程中,从上到下对每两个相邻记录比较关键字大小,使较小关键字的记录上升,像水中的气泡向上冒出一样,而关键

字较大的记录好比石头沉到序列的底部,故称此方法为冒泡排序法。

算法思路:若有n个记录需要排序,首先将第一个记录的关键字和第二个记录的关键字进行比较,若为逆序(即r[2].key<r[1].key),则两个记录交换,然后比较第二个记录和第三个记录的关键字。依此类推,直至第n个记录和第n-1个记录的关键字进行比较/交换为止。

void BubbleSort (RcdType r[ ],int n){

for(i=1;j<n;i++){

flag=1;

for(j=1;j<=n-i;j++)

if(r[j+1].key<r[j].key){

flag=0;

r[0]=r[j];r[j]=r[j+1];r[j+1]=r[0];

}

if(flag) break;

}

}

2.快速排序

快速排序(Quick sort)是由霍尔(Hoare)提出,它是一种对冒泡排序的改进。该方法的实质是

将一组关键字[K

1 ,K

2

,K

3

,…,Kn]进行分区交换排

序。通过一趟排序将待排序的记录分割成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,则可分别对这两部分记录继续进行分区交换排序,以达到整个序列有序。

算法思路是:

(1)任选一个关键字(一般可先第一记录的关

键字K

1)为控制字,将[K

1

,K

2

,…,Kn]分成

左、右两个子区,使左区所有关键字小于

等于K

1,右区所有关键字大于等于K

1

,最后

控制字K

1

居两个子区中间的适当位置。在子区内数据尚处于无序状态。

(2)将右区首、尾指针[记录的下标号]保存入栈,对左区进行与第(1)步相类似的操作,

又得到它的左子区和右子区,控制字居中。(1)重复第(1)、(2)步,直到左区处理完毕。然后退栈,再对另一个子区进行相类

同的处理,直到栈空。

void Quick_Sort(RcdType r[ ],int low,int

high){

i=low;j=high;t=r[low];

while(i<j){

while(i<j&&r[j].key>t..key) j--;

if(i<j) r[i++]=r[j];

while(i<j&&r[i].key<=t.key) i++;

if(i<j) r[j--]=r[i];

}

if(low<i-1) Quick_Sort(r,low,i-1);

if(high>i-1) Quick_Sort(r,i+1,high);

}

6.2.3 选择排序

选择排序(Selection sort)是以选择为基础的一种常用排序方法,它也有几种不同的实现方法,这里仅介绍单选择排序和堆排序。

1.简单选择排序

简单选择排序(simple Selection sort)也称直接选择排序。此方法在高级语言变成中较常用。它首先选出关键字最小的饿记录送到最前位置,再选关键字次小的记录送到第二个位置,……,直至

选择完了n个记录为止。

算法思路:对于一组关键字(K

1 ,K

2

,… ,Kn),

将其由大到小进行排序,首先从K

1 ,K

2

,… ,Kn中

选择最小值,假如它是Kk,则将Kk与K

1

对换;然后

从K

2 ,K

3

,… ,Kn中选择最小值Kk,再将Kk与K

2

对换。如此进行选择和调换,对第i趟选择排序,进行n-1次关键字比较,从n-i+1个记录中选出关键字最小的记录,并个第i(1≤i≤n)个记录交换。令i从1至n-1,进行n-1趟选择排序,一个由小到大的有序序列就形成。

void SelectSort(TcdType r[ ],int n){

for(i=1;i<n;j++)

if(r[j].key<r[k].key) k=j;

if(i!k){

t=r[i];r[i]=r[k];r[k]=t;

}

}

}

2.堆排序

堆排序(Heap sort)是另一种选择排序,是利用堆的特性进行的排序过程。堆是n 个元素的

有限序列{k

1,k

2

,…,kn},当且仅当满足如下关

系时,称之为堆。

ki≤k2i和ki≤k2i+1(i=1,2,…,[n/2])

或ki≥k2i和ki≥k2i+1(i=1,2,…,[n/2])

堆排序的基本思路是:把n 个记录存于向量r

相关文档
最新文档