【C++算法】2018.8.27 小结 (2)

简单记录下,insert, delete,reverse还有向有序数组中插入元素的算法(插入后依然有序)

1. 有序数组中插入元素

思路:主要是for循环的条件语句。

for (i = n-1; i >=0 && x <a[i] ; i--)

a[i+1] = a[i];

a[i+1] = x;                //&& x <a[i]   这句使得,循环结束后的a[i] 刚刚好比 x小,

                                //把x 赋给 a [i +1] 项即可。

2.insert,delete ,reverse 都是LinearList 类的方法。

(1).   insert

insert 与有序数组 的insert 有些相似。

for ( i = length - k ; i >= k ; i--)

element [i +1] = element [i] ;  //   第一个i时, a[k+1] = a[k]

element [ k ] = x;                    // element [ k-1] 是第k个元素,后面的元素都已调整好。

辨析:第一个insert 用 && a[i]>x ,第二个insert 用的是int i = length - k.

第一个例子需要根据 元素大小排序,这样才可找到正确的索引 i .

第二个例子已经给定了位置,要在第k个元素后 插入 元素。

(2).  delete (int k )

for (int i = k; i < length; i++)

element[ i-1] = element [i]    ;  // 第一个i,是a[k-1] = a[k], a[k-1]是不要的K元素。

length--;

(3)  Reverse  原地重排,并reverse

  1. int n = this->Length();
  2.     if (n % 2 == 0) {
  3.         for (int i = 0; i < (n / 2); i++)
  4.             swap(element[i], element[n - i - 1]);
  5.     }
  6.     else for (int i = 0; i < (n - 1) / 2; i++)
  7.         swap(element[i], element[n - i - 1]);

猜你喜欢

转载自blog.csdn.net/shengda_mao1118/article/details/82109717
今日推荐