- 1、本文档共34页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第9章 排序 9.1排序的基本概念 4、排序的种类:分为内部排序和外部排序两大类。 若待排序记录都在内存中,称为内部排序;若待排序记录一部分在内存,一部分在外存,则称为外部排序。 9.2 插入排序 2、C语言程序 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; } } 二、希尔(shell)排序 (又称缩小增量排序) 4、C语言程序 void ShellSort(DataType a[], int n, int d[], int numOfD) { int i, j, k, m, span; DataType temp; for(m = 0; m numOfD; m++) { span = d[m]; for(k = 0; k span; k++) { for(i = k; i n-span; i = i+span) { temp = a[i+span]; j = i; while(j -1 temp.key = a[j].key) { a[j+span] = a[j]; j = j-span; } a[j+span] = temp; } } } } 练习: 1. 欲将序列(Q, H, C, Y, P, A, M, S, R, D, F, X)中的关键码按字母升序重排,则初始步长为4的希尔排序一趟的结果是? 答: 原始序列: Q, H, C, Y, P, A, M, S, R, D, F, X shell一趟后: 9.3 选择排序 一、直接选择排序 二、堆排序 例4:有序列T1=(08, 25, 49, 46, 58, 67)和序列T2=(91, 85, 76, 66, 58, 67, 55),判断它们是否 “堆”? 3. 怎样进行整个序列的堆排序? 例5:对刚才建好的大根堆进行排序: 9.4 交换排序 交换排序的基本思想是:利用交换数据元素的位置进行排序的方法。 一、冒泡排序 3、C语言实现 void QuickSort(DataType a[], int low, int high) { int i = low, j = high; DataType temp = a[low]; while(i j) { while(i j temp.key = a[j].key) j--; if(i j) { a[i] = a[j]; i++; } while(i j a[i].key temp.key) i++; if(i j) { a[j] = a[i]; j--; } } a[i] = temp; if(low i) QuickSort(a, low, i-1); if(i high) QuickSort(a, j+1, high); } 二、快速排序 1、基本思想:从待排序列中任取一个元素 (例如取第一个) 作为中心,所有比它小的元素一律前放,所有比它大的元素一律后放,形成左右两个子表;然后再对各子表重新选择中心元素并依此规则调整,直到每个子表的元素只剩一个。此时便为有序序列了。 2、优点:因为每趟可以确定不止一个元素的位置,而且呈指数增加,所以特别快。 例7、关键字序列 T=(60,55,48,37,10,90,84,36),请按从小到大的顺序,写出快速排序的具体实现过程。 第一次快速排序过程 * * 9.1 排序的基本概念 9.2 插入排序 9.3 选择排序 9.4 交换排序 9.5 归并排序 9.6 基数排序 9.7 性能比较 1.排序: 将一组杂乱无章的数据按一定的规律顺次排列起来的过程。 存放在数据表中 按关键字排序 2. 排序的目的:便于查找。 3.排序算法好坏的衡量标准: (1)时间复杂度—— 它主要是分析记录关键字的比较次数和记录的移动次数。 (2)空间复杂度——算法中使用的内存辅助空间的多少。 (3)稳定性——若两个记录A和B的关键字值相等,但排序后A、B的先后
文档评论(0)