知识大全 数据结构考研分类复习真题 第十章 答案[34]

Posted 元素

篇首语:韬略终须建新国,奋发还得读良书本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 数据结构考研分类复习真题 第十章 答案[34]相关的知识,希望对你有一定的参考价值。

   typedef struct   int num; float score; RecType;  void SelectSort(RecType R[ ] int n)   for(i= ; i<n; i++)   //选择第i大的记录 并交换到位  k=i;       //假定第i个元素的关键字最大  for(j=i+ ;j<=n;j++)     //找最大元素的下标  if(R[j] score>R[k] score)  k=j;  if(i!=k)  R[i] < >R[k];  //与第i个记录交换  //for  for(i= ; i<=n; i++) //输出成绩   printf( %d %f R[i] num R[i] score); if(i% == ) printf( \\n );  //SelectSort

   typedef struct   int key; datatype infoRecType  void CountSort(RecType a[] b[] int n) //计数排序算法 将a中记录排序放入b中   for(i= ;i<n;i++) //对每一个元素   for(j= cnt= ;j<n;j++)  if(a[j] key<a[i] key) cnt++; //统计关键字比它小的元素个数  b[cnt]=a[i];    //Count_Sort

  ( ) 对于有n个记录的表 关键码比较n 次

  ( ) 简单选择排序算法比本算法好 简单选择排序比较次数是n(n )/ 且只用一个交换记录的空间 而这种方法比较次数是n 且需要另一数组空间

  [算法讨论]因题目要求 针对表中的每个记录 扫描待排序的表一趟 所以比较次数是n 次 若限制 对任意两个记录之间应该只进行一次比较 则可把以上算法中的比较语句改为

  for(i= ;i<n;i++) a[i] count= ;//各元素再增加一个计数域 初始化为   for(i= ;i<n;i++)  for(j=i+ ;j<n;j++)  if(a[i] key<a[j] key) a[j] count++; else a[i] count++;

cha138/Article/program/sjjg/201311/23175

相关参考