提高插入排序的运行时复杂性?

时间:2017-01-15 12:13:45

标签: c++ runtime time-complexity

我编写了以下代码,尝试在O(log n)运行时执行插入到排序向量中:

std::vector<int> to_insert_sort {2,3,5,6,1,1,3,2};

int to_insert {3};

std::sort(to_insert_sort.begin(), to_insert_sort.end()); //O(log n)

auto pos = std::upper_bound(to_insert_sort.begin(), to_insert_sort.end(), 5); //O(log n)

to_insert_sort.insert(pos, to_insert); //O(n)

1)我是否正确地说这个操作是O(log n)?

2)是否有提高运行时效率的方法来执行此操作?

1 个答案:

答案 0 :(得分:2)

  

1)我是否正确地说这个操作是O(log n)?

std::sort O(n * log n)

std::upper_bound O(log n)

std::vector.insert O(n)

  

2)是否有办法在增加运行时间的情况下执行此操作   效率η

是的,您可以在O(log n)中插入,但您需要更改数据结构。例如,您可以使用std::multiset<int>代替std::vector<int>

std::multiset<int> m;
//m<={2,3,5,6,1,1,3,2}; //O(n * log n)
int to_insert {3};
m.insert(to_insert); //O(log n)