知识大全 数据结构考研分类复习真题 第二章 答案[26]
Posted 负数
篇首语:书到用时方恨少,事非经过不知难。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 数据结构考研分类复习真题 第二章 答案[26]相关的知识,希望对你有一定的参考价值。
.[题目分析]题目要求重排n个元素且以顺序存储结构存储的线性表 使得所有值为负数的元素移到正数元素的前面 这可采用快速排序的思想来实现 只是提出暂存的第一个元素(枢轴)并不作为以后的比较标准 比较的标准是元素是否为负数
int Rearrange(SeqList a; int n)∥a是具有n个元素的线性表 以顺序存储结构存储 线性表的元素是整数 本算法重排线性表a 使所有值为负数的元素移到所有值为正数的数的前面 i= ; j=n ;∥ i j为工作指针(下标) 初始指向线性表a的第 个和第n个元素 t=a[ ];∥暂存枢轴元素 while(i<j) while(i<j && a[j]>= ) j ;∥ 若当前元素为大于等于零 则指针前移 if(i<j)a[i]=a[j];i++;∥ 将负数前移 while(i<j &&a[i]< )i++;∥ 当前元素为负数时指针后移 if(i<j) a[j ]=a[i];∥ 正数后移 a[i]=t;∥将原第一元素放到最终位置
[算法讨论] 本算法时间复杂度为O(n) 算法只是按题目要求把正负数分开 如要求统计负数和大于等于零的个数 则最后以t来定 如t为负数 则 至i共i+ 个负数 n i个正数(包括零) 另外 题目并未提及零的问题 笔者将零放到正数一边 对此问题的扩充是若元素包含正数 负数和零 并要求按负数 零 正数的顺序重排线性表 统计负数 零 正数的个数 请读者利用上面解题思想自行解答
cha138/Article/program/sjjg/201311/23348相关参考