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

数据结构排序总结.ppt

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

排序总结 liangyus@sdu.edu.cn Agenda 名次排序 选择排序 冒泡排序 插入排序 基数排序 堆排序 归并排序 快速排序 1、名次排序 元素在队列中的名次(rank)可定义为队列中所有比它小的元素数目加上在它左边出现的与它相同的元素数目。 例如,给定一个数组a=[4, 3, 9, 3, 7]作为队列,则各元素的名次为r=[2,0,4,1,3]。 1、名次排序 template class T void Rank(T a[], int n, int r[]) { //计算a [0:n-1]中n个元素的排名 for (int i = 0; i n; i++) r[i] = 0; //初始化 //逐对比较所有的元素 for (int i = 1; i n; i++) for ( int j = 0; j i; j++) if (a [j] = a[i]) r[i]++; else r[j]++; } 1、名次排序 template class T void Rearrange (T * a, int n, int r[]) { //按序重排数组a中的元素,使用附加数组u T *u = new T[n+1]; //在u中移动到正确的位置 for ( int i = 0; i n; i++) u[r[i]] = a[i]; delete [ ]a; a=u; } 1、名次排序 根据a的元素之间所进行的比较操作来估算程序的时间复杂性。 对于i的每个取值,执行比较的次数为i,所以总的比较次数为1+2+3+ … +n-1 = (n-1)n/2。 移动操作次数为:n 2、选择排序 思想: 首先找出最大的元素,把它移动到a[n-1],然后在余下的n-1个元素中寻找最大的元素并把它移动到a[n-2],如此进行下去。 2、选择排序 templateclass T int Max(T a[], int n) {// 寻找a [0 : n-1]中的最大元素 int pos = 0; for (int i = 1; i n; i++) if (a[pos] a[i]) pos = i; return pos; } 每次调用Max(a,size)需要执行size-1次比较。 2、选择排序 template class T void SelectionSort (T a[], int n) { //对数组a [0:n-1]中的n个元素进行排序 for ( int size = n; size 1; size- -) { int j= Max(a, size); //size-1次比较 Swap( a[j],a[size-1] ) ; //移动3次 } } 2、选择排序 按照元素的比较次数来估算函数的时间复杂性。 每次调用Max(a,size)需要执行size-1次比较,所以总的比较次数为: 1+2+3+…+n-1= (n-1)n/2。 移动次数为:3(n-1) 2、选择排序 上述程序中选择排序函数的一个缺点是:即使元素已经按序排列,程序仍然继续运行。 为了终止不必要的循环,在查找最大元素期间,可以顺便检查数组是否已按序排列。 2、选择排序 templateclass T void SelectionSort(T a[], int n) { // 及时终止的选择排序 bool sorted = false; for(int size = n; !sorted (size 1);size--) { int pos = 0; sorted = true; // 找最大元素 for (int i = 1; i size; i++) if (a[pos] = a[i]) pos = i; else sorted = false; // 未按序排列 Swap(a[pos], a[size - 1 ] ) ; } } 2、选择排序 最好情况:数组a有序。 最坏情况:数组a最大元素在首位,其他元素 已经有序。 最好 最坏 比较 n-1 n(n-1)/2 移动 3 3(n-1) 3、冒泡排序 采用一种“冒泡策略”把最大元素移到右部。在冒泡过程中,对相邻的元素进行比较,如果左边的元素大于右边的元素,则交换这两个元素。 在一次冒泡过程结束后,可以确信最大的元素肯定在最右边的位置上。 例:[ 11,15 ,3 ,9,20,7 ,1 ],在第一次冒泡过程结束后,得到? 3、冒泡排序 template class T void Bubbl

文档评论(0)

153****9595 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档