我从用户那里(一个接一个)获取整数,并通过运行二进制搜索并找到插入索引将其插入到已排序的 vec 中。问题是当用户决定提供一个反向排序的输入(一个接一个)时,插入会很昂贵,O(n^2),因为在每次插入时,vec 中的所有当前元素都必须向右移动. 有没有一种算法可以用更少的时间处理这个问题?
例子:
[] <- 10
[10] <- 9 // Shift x1
[9, 10] <- 8 // Shift x2
[8, 9, 10] <- 7 // Shift x3
[7, 8, 9, 10] <- 6 // Shift x4
.
.
.