第3章 查找与排序技术3.2(new)

时间:2025-07-10

青 海 大 课 学 程 建 设 项 目

软件技术基础

计算机系教研室授课教师 韩亮 397406660@http://www.77cn.com.cn

软件技术基础

3.1 基本的查找技术 3.2 基本的排序技术

青海大学课程建设项目

3.1 基本的查找技术

软件技术基础

上次课主要内容 3.1.1 顺序查找 3.1.2 有序表的对分查找

3.1.3 分块查找 3.1.4 哈希表

青海大学课程建设项目第2章 基本数据结构及其运算 3

3.2 基本的排序技术

软件技术基础

本次课主要内容 3.2.1 冒泡排序与快速排序

3.2.2 简单插入排序与希尔排序

3.2.3 简单选择排序与堆排序 3.2.4 其他排序方法简介

青海大学课程建设项目第2章 基本数据结构及其运算 4

软件技术基础 3.2 基本的排序技术

排序:将一组次序任意的数据元素转变成按其关键字值 递增(或递减)次序排列的过程。序号 ISBN 书名 单价 销量 销售额

01 2 3 ... n-1

7-4302-7685-315-2302-3849-2 9-7809-2345-9 9-7873-0203-9

数据结构数据库 C语言设计 软件技术 ...

3021 21.5 21

3000900 5000 1200

9000018900 107500 25200

3-3303-3849-7

图像处理

33

300

9900

青海大学课程建设项目

软件技术基础 3.2.1 冒泡排序与快速排序(交换排序)

1. 冒泡排序(1)首先,从表头开始往后扫描线性表,在扫描过程中逐 次比较相邻两个元素的大小。

(2)若相邻两个元素中,前面的元素大于后面的元素,则将它们互换,称之为消去了一个逆序。 显然,在扫描过程中,不断地将两相邻元素中的大者往后移 动,最后就将线性表中的最大者换到了表的最后。 经过第 i 趟排序后,序列达到有序,结束排序。青海大学课程建设项目

软件技术基础

青海大学课程建设项目

软件技术基础输入:无序序列p(1:n)。 输出:有序序列p(1:n)。 Procedure Bubsort(p,n) m = n; While(m>0) DO /*判断子表是否为空*/ k = m-1; For j=0 to k If p[j]>p[j+1] Then p[j] <-> p[j+1]; m--; Return;

青海大学课程建设项目

软件技术基础冒泡排序C语言描述 bubsort(ET p[], int n) { int m,k,j,tmp; m = n; while(m>0) { k = m-1; For j=0 to k If p[j]>p[j+1] Then {tmp=p[j]; p[j]=p[j+1];p[j]=tmp;} m--; } }青海大学课程建设项目

软件技术基础2. 快速排序

青海大学课程建设项目

软件技术基础首先,选取表中一个元素p(k),令T=p(k)称为控制关键字。

然后设置两个指针i和j分别指向表的起始与最后的位置。反复作以下两步: (1)将j逐渐减小,并逐次比较P(j)与T,直到发现一个P(j) <T为止,将P(j)移到P(i)的位置上。 (2)将i逐渐增大,并逐次比较P(i)与T,直到发现一个P(i)

>T为止,将P(i)移到P(j)的位置上。上述两个操作交替进行,直到指针i与j指向同一个位置(即 i=j)为止,此时将T移到P(i)的位置

上。

青海大学课程建设项目

软件技术基础

68 56 32

39 39 39

65 65 47

83 47

74 32 65

32

47 74

56 83 83

6868

565656 56

747474 74

3232 32

39

4747 47

6565 65

6868 68

8383 83 结果

3939

青海大学课程建设项目

软件技术基础线性表的分割 输入:待分割的子表P(m:n)。 输出:分割后的分界线位置i。 Procedure Split(p,m,n,i) 选取P(k) 其中m≤k≤n P(k)=P(m); T=P(k); i=m;j=n WHILE (i≠j) DO { WHILE (P(j)≥T)and(i<j) DO j=j-1; P(i)=P(j); WHILE (P(i)≤T)and(i<j) DO i=i+1; P(j)=P(i); } P(i)=T RETURN青海大学课程建设项目

软件技术基础快速排序的递归算法 输入:待排序的子表P(m:n)。

输出:有序子表P(m:n)。PROCEDURE QKSORT1(P,m,n) IF (n>m) THEN [子表不空]

{ SPLIT(P,m,n,i);

[分割]

QKSORT1(P,m,i-1);[对前面子表进行快速排序] QKSORT1(p,i+1,n);[对后面子表进行快速排序] } RETURN青海大学课程建设项目

软件技术基础快速排序C语言描述 qksort1(ET p[],int m,int n) { int i; /*分割*/

if (n>m) /*子表不空*/{i=split(p,m,n); qksort1(p,m,i-1);/*对前子表进行快速排序*/ qksort1(p,i+1,n);/*对后子表进行快速排序*/ } return; }青海大学课程建设项目

软件技术基础int split(ET p[],int m,int n) /*返回分界线位置*/ { int i,j,k,u;ET t;

i=m; j=n;t =p[m];while (i!=j) { while ((i<j)&&(p[j]>=t)) j=j-1; p[i]=p[j]; while ((i<j)&&(p[i]<=t)) i=i++1; p[j]=p[i]; } p[i]=t;return(i);青海大学课程建设项目 }

…… 此处隐藏:423字,全部文档内容请下载后查看。喜欢就下载吧 ……
第3章 查找与排序技术3.2(new).doc 将本文的Word文档下载到电脑

    精彩图片

    热门精选

    大家正在看

    × 游客快捷下载通道(下载后可以自由复制和排版)

    限时特价:7 元/份 原价:20元

    支付方式:

    开通VIP包月会员 特价:29元/月

    注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
    微信:fanwen365 QQ:370150219