有关顺序表中各操作算法的总结
此类问题均有通用解法,对于无序数组可先对其排序变为有序数组,再利用二分法定位某值,或者利用创立大小够大的新数组来对原数组进行计数(如:a【5】=2,即为原数组有2个5)。
此类问题有以下几类:
删除某无序表中某固定元素x:算法1:设置一个工作参数为j,j用来计数不等于x的元素的个数,对列表遍历,定义a【j】=a【i】
算法2:设置一个工作参数为j, j用来计数等于x的元素的个数,对列表遍历,定义a【i-k】=a【i】
算法3:设置两个工作指针首末i,j;对列表进行遍历,当i指向值为x的地址时,可将j的值移动到
i处(j不指向x);此算法能删除x,但会打乱原数组中排序。
算法4:对该表排序。(最复杂,复杂度为o(n2))
从无序表中删除重复元素 : 算法1:对该无序表进行排序
算法2:设置一个工作参数j,j用来计数等于多余元素的个数,对每一个元素,遍历表。复杂度为o(n2)
算法3:设置一个足够大的数组a【n】={0},对a【数组每个元素】++,可对原数组计数。此算法复杂度为o(n),但耗费空间,且 只适用于非负整数数组。
算法4:利用哈希(?)
从两个升序序列中取得其中位数: 算法1:对两个序列进行排序
算法2:将两个序列均进行二等分,去掉中间值大的序列的右边,中间值小的左边,无限进行等分。