Incorrect Worst-case time complexity of Insertion Sort

血红的双手。 提交于 2020-01-25 08:41:07

问题


Hi I am new to algorithms and am quite fascinated by it.

I am trying to figure out worst case time complexity of insertion sort and it is mentioned as O(n**2). Instead, we can have the time complexity as O(N*logN).

Here is my explanation,

THe insertion sort looks at the 1st element and assumes it is sorted. Next it looks at the 2nd element and compares with the predecessor sorted sublist of 1 element and inserts it based on the comparison with elements in the predecessor sorted sublist. This process is repeated similarly.

Everywhere it is mentioned that to insert an element into the predecessor sorted sublist, basically linear search,it takes O(N) time and as we have do these operations for n elements it takes us O(N**2).

However, if we use binary insertion to insert the element into predecessor sublist it should take O(logn) time where n is the length of sublist. Basically compare the new element with the middle element of predecessor sorted sublist and if it is greater than the middle element then new element lies between the middle element and the last element of the sublist.

As we repeat the operations for n items it should take us O(N*logN). We can use binary search approach as we know the predecessor sublist is sorted.

So shouldn't the worst case time complexity be O(N*logN) instead of O(N**2).


回答1:


Yes, you can find the insertion point in O(log n), but then you have to make space to insert the item. That takes O(n) time.

Consider this partially-sorted array:

[1,2,3,5,6,7,9,4]

You get to the last item, 4, and you do a binary search to locate the position where it needs to be inserted. But now you have to make space, which means moving items 9, 7, 6, and 5 down one place in the array. That's what makes insertion sort O(n^2).



来源:https://stackoverflow.com/questions/46980328/incorrect-worst-case-time-complexity-of-insertion-sort

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!