|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 BigSpoon 于 2016-10-24 19:06 编辑
removeRange函数用于删除指定范围内的所有元素即[start,end),求出该函数的复杂度?
- template<class T>
- void arrayListWithRemoveRange<T>::removeRange(int start, int end)
- {
- // listSize为整个用数组描述的线性表的长度
- if (start < 0 || end > listSize) //-------------theta(1)
- //illegalIndex()返回一个错误算法复杂度视为theta(1)
- throw illegalIndex(); //-------------omega(0) O(1)
- if (start >= end) //--------------theta(1)
- // nothing to remove
- return; //--------------omega(0) O(1)
- // 将一个元素的copy视为theta(1);
- copy(element + end, element + listSize,
- element + start); //-----theta(listSize-end)
- // destroy uneeded elements
- int newSize = listSize - end + start;//-----theta(1)
- for (int i = newSize; i < listSize; i++)//theta(max(listSize-newSzie+1,1))
- element[i].~T(); //---theta(max(listSize-newSize,1))
- listSize = newSize; //--------theta(1)
- }
复制代码
该方法的复杂度为 theta(max(listSize-end,end-start))? |
|