有关顺序表中各操作算法的总结

此类问题均有通用解法,对于无序数组可先对其排序变为有序数组,再利用二分法定位某值,或者利用创立大小够大的新数组来对原数组进行计数(如: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:将两个序列均进行二等分,去掉中间值大的序列的右边,中间值小的左边,无限进行等分。

posted @ 2019-02-22 22:12  xhyxhy  阅读(352)  评论(0编辑  收藏  举报