网站大量收购独家精品文档,联系QQ:2885784924

基数排序算法-UIC.ppt

  1. 1、本文档共77页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
基数排序算法-UIC.ppt

算法效率的度量 1 什么是算法?如何评判算法的好坏? 2 时间复杂度和空间复杂度如何表示? 3 计算举例 1 什么是算法?如何评判一个算法的好坏? 3n+2=O(n) 因为 3n+2?4n for n?2 6*2n+n2=O(2n) 因为6*2n+n2 ?7*2n for n?4 计算举例 2 时间复杂度和空间复杂度如何表示? 内部排序 排序介绍 排序(Sorting)是数据处理中一种很重要的运算,同时也是很常用的运算,一般数据处理工作25%的时间都在进行排序。简单地说,排序就是把一组记录(元素)按照某个域的值的递增(即由小到大)或递减(即由大到小)的次序重新排列的过程。 排序------将一个包含若干数据元素(或记录)的任意序列,重新排列成一个按关键字有序的序列的过程。 按待排序记录所在的位置,可分为: 内部排序:待排序记录存放在内存。 外部排序:当待排序记录数量很大时,一部分记录需放在外存,在排序过程中就需要对外存进行访问。 排序的基本概念 内部排序分为: 插入排序 快速排序 选择排序 归并排序 基数排序(略过)? 直接插入排序 希尔排序 1. 插入排序 1.1 直接插入排序 基本操作是:将一个记录插入到已排好序的有序表中,从而得到一个新的、记录数增1的有序表。 基本思想是:当插入第 i (i≥2)个记录时,前面的 r [1], r [2], …, r [i -1]已经排好序。这时, 将 r [i]的关键字依次与r[i -1], r[i -2]…的关键字进行比较,并同时将相关记录位置后移,直到找到插入 r [i] 的合适位置。 有一组记录的关键字初始排列如下: 49 38 65 97 76 13 27 49 请使用直接插入排序方法,将以上记录按照关键字非递减排列。 算法实现 void InsertSort(DataType a[], int n)? /*用直接插入法对a[0]--a[n-1]排序*/ { int i, j; DataType temp; for(i = 0; i n-1; i++) { temp = a[i+1]; j = i; while(j -1 temp.key a[j].key) { a[j+1] = a[j]; j--; } a[j+1] = temp; } } 1.1直接插入排序的算法分析 算法简便,容易实现。 当待排序记录数 n 很小时,是一种很好的排序方法。 当待排序记录数 n 很大时,不宜使用。 时间复杂度为O(n2)。 空间复杂度为S(n)=O(1),即使用一个辅助单元(第0个单元)。 1.2希尔排序 基本思想: 1)先取一个正整数d1(d1<记录数n),把所有相隔d1的记录放一组,这样就把整个待排记录序列分割成若干个子序列,对每个子序列进行直接插入排序。 2)再取 d2 d1,把所有相隔 d2 的记录放一组,对每一组内的记录进行直接插入排序。 3)最后取 di=1,即把所有记录放在一组进行直接插入排序。 例题如下: 对下列关键字进行希尔排序: 49 38 65 97 76 13 27 48 55 4 取 d1=5,d2=3,d3=1。 1.2 希尔排序的特点 子序列的构成不是简单的“逐段分割”,而是将相隔某个增量的记录组成一个子序列 关键字较小的记录跳跃式前移,在进行最后一趟增量为1的插入排序时,序列已基本有序 设n为待排序记录个数,一般di取值如下: d1= ?n/2?,d2= ?d1/2?,…,直到di=1。 2 交换排序 交换排序的基本思想是:利用交换数据元素的位置进行排序的方法。 2.1 、冒泡排序 伪代码方法 Input: an array A[p, r] Quicksort (A, p, r) { if (p r) { q = Partition (A, p, r) //q是基准关键字的位置 Quicksort (A, p, q-1)? Quicksort (A, q+1, r)? } } 一趟快速排序的过程(partition):附设两个指针 i 和j,i 指向第一个关键字 (基准关键字), j 指向最后一个关键字。 首先从 j 所指位置开始向前查找第一个关键字小于 key 的记录,找到后将其和 i 所指记录交换。 然后再从 i 所指位置开始向后查找第一个关键字大于 key 的记录,找到后将其和 j 所指记录交换。 重复上述两步,直到 i = j 为止

您可能关注的文档

文档评论(0)

18273502 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档