当前位置:高等教育资讯网  >  中国高校课件下载中心  >  大学文库  >  浏览文档

武汉理工大学:《软件技术基础》第四章 查找与排序技术(2/2)

资源类别:文库,文档格式:PPT,文档页数:17,文件大小:253.5KB,团购合买
1、排序的功能:将一个数据元素(或记录)的任意序列,重新排成一个按关键字有序的序列。 2、排序过程的组成步骤:
点击下载完整版文档(PPT)

44基本排序 44.1概述 1、排序的功能:将一个数据元素(或记录)的任意 序列,重新排成一个按关键字有序的序列。 2、排序过程的组成步骤: °首先比较两个关键字的大小; 然后将记录从一个位置移动到另一个位置。 3、用于内存文件的排序

4.4 基本排序 4.4.1 概 述 1、排序的功能:将一个数据元素(或记录)的任意 序列,重新排成一个按关键字有序的序列。 2、排序过程的组成步骤: • 首先比较两个关键字的大小; • 然后将记录从一个位置移动到另一个位置。 •3、用于内存文件的排序

假设待排序的记录存放在地址连续的 组存储单元中,那么这种存储方式 下的数据类型可描述为 #define max 20 key info typedef struct Int key, float otherinfo: 234 MAX J RetYpe;

假设待排序的记录存放在地址连续的 一组存储单元中,那么这种存储方式 下的数据类型可描述为: MAX 0 1 2 3 4 … … … key info #define MAX 20 typedef struct { int key; float otherinfo; }RedType;

直接插入排序 插入排序折半插入排序 shel1排序 简单选择排序 选择排序 堆排序 基本排序 起泡排序 交换排序 快速排序 基数排序 归并排序

基本排序 插入排序 选择排序 交换排序 归并排序 直接插入排序 折半插入排序 简单选择排序 堆排序 起泡排序 快速排序 基数排序 shell排序

442插入排序 插入排序基本思想: 每步将一个待排序的记录按其关键字 大小插入到前面已排序表中的适当位置,直 到全部插入完为止

4.4.2 插入排序 插入排序基本思想: 每步将一个待排序的记录按其关键字 大小插入到前面已排序表中的适当位置,直 到全部插入完为止

直接插入排序: 基本思想:从数组的第2号元素开始,顺序从数组中取出元素, 并将该元素插入到其左端已排好序的数组的适当位置上 待排元素序列:|532736156942 第一次排序:1275336156942 对于有n个数 据元素的待排 第二次排序:1273653]156942 序列,插入操 作要进行n-1 第三次排序:15273653]6942 次 第四次排序:1152736536942 该算法适合于n较 第五次排序:152736425369小的情况,时间复 杂度为O(m2 直接插入排序示例

该算法适合于n 较 小的情况,时间复 杂度为O(n2 ). 基本思想:从数组的第2号元素开始,顺序从数组中取出元素, 并将该元素插入到其左端已排好序的数组的适当位置上 待排元素序列:[53] 27 36 15 69 42 第一次排序: [27 53] 36 15 69 42 第二次排序: [27 36 53] 15 69 42 第三次排序: [15 27 36 53] 69 42 第四次排序: [15 27 36 53 69] 42 第五次排序: [15 27 36 42 53 69] 直接插入排序示例 对于有n个数 据元素的待排 序列,插入操 作要进行n-1 次 直接插入排序:

插入算法如下: 方法:K与K1,K12K1依次比较直到找到应插入的位置。 void insertSort(RedType ll, int n) f int i,j; for(i=2; K<=n; i++) if(Ll.key<Li-1. key {L10=L[ *作为监视哨* for(j=i-l; LO-key<lljl. key;-=j) Lj+1|=Lj;/记录后移* Lj+1|=L|0;/插入*

void insertSort(RedType L[ ],int n) { int i ,j; for(i=2; i<=n; i++) if(L[i].key<L[i-1].key) { L[0]=L[i]; /* 作为监视哨*/ for( j=i-1; L[0].key<L[j].key; − −j ) L[j+1]=L[j]; /* 记录后移*/ L[j+1]=L[0]; /* 插入 */ } } 插入算法如下: 方法:Ki与Ki-1 ,K i-2 ,…K1依次比较,直到找到应插入的位置

4.4.3选择排序 基本思想: 每一趟在n-+1个记录中选取关键码最 小的记录作为有序序列中第个记录

基本思想: 每一趟在n-i+1个记录中选取关键码最 小的记录作为有序序列中第i个记录。 4.4.3 选择排序

初态k→839 6 简单选择排序 9 第 if k jf 思想:首先从1n个元素中选16趟 8 39 出关键字最小的记录交换到第 839 互换 k 个位置上。然后再从第2个 到第n个元素中选出次小的记13986 录交换到第二个位置上,依次 类推。 986 第二趟 时间复杂度为O(n2), 适用于待排序元素较少的情况。1986 13986 第 趟

思想:首先从1~n个元素中选 出关键字最小的记录交换到第 一个位置上。然后再从第2 个 到第n个元素中选出次小的记 录交换到第二个位置上,依次 类推。 时间复杂度为O(n2 ), 适用于待排序元素较少的情况。 初态 8 3 9 1 6 8 3 9 1 6 8 3 9 1 6 8 3 9 1 6 i j k i k j i k j i k j 1 3 9 8 6 互换 i j k 1 3 9 8 6 i k j 1 3 9 8 6 i k j 第 一 趟 第 二 趟 1 3 9 8 6 i k j 第 三 趟 简单选择排序

简单选择排序的算法如下: void Selectsort( RedType li ,int n) i int i,j, k, t; for(i=1,<=n;++i) 选择第小的元素,并交换到位 {k=i; forgj=i+1:j<=n; ++j) if( Llj. key< LIk. key)k=j;/Lk中存放的是第I小的元素* if(kl=i t=Ll 交换 LH=Lk; L[k=t 3 FOR* 3 Selectsort*/

简单选择排序的算法如下: void SelectSort( RedType L[ ],int n) { int i,j,k,t; for (i=1,i<=n;++i) /*选择第i小的元素,并交换到位*/ { k=i; for(j=i+1;j<=n;++j) if ( L[j].key<L[k].key) k=j; /*L[k] 中存放的是第I小的元素*/ if(k!=i) { t=L[i]; /*交换*/ L[i]=L[k]; L[k]=t ;} } /*FOR*/ } /* SelectSort*/

44.4交换排序(互换排序) 互换排序: 助教据元之间的相互交换进行的一种排 序方法。 特点:交换。 有冒泡和快速排序两种

4.4.4 交 换 排 序(互换排序) 互换排序: 借助数据元素之间的相互交换进行的一种排 序方法。 特点:交换。 有冒泡和快速排序两种

点击下载完整版文档(PPT)VIP每日下载上限内不扣除下载券和下载次数;
按次数下载不扣除下载券;
24小时内重复下载只扣除一次;
顺序:VIP每日次数-->可用次数-->下载券;
共17页,试读已结束,阅读完整版请下载
相关文档

关于我们|帮助中心|下载说明|相关软件|意见反馈|联系我们

Copyright © 2008-现在 cucdc.com 高等教育资讯网 版权所有