我有一个关于c ++实验室作业的问题。任务是实现一些函数来添加值,从数组中删除值等等。我现在已经完成了大部分工作,但是我对插入功能有一些问题。赋值需要我将float值插入此数组,而不使用任何算法在每次插入后对其进行排序。我也许不会使用STL的任何东西。它将假设我立即在排序位置插入每个值
所以我想知道是否有人能给我任何线索如何解决这个问题?
修改 这项任务我不会用链表实现它。这将是我下一次的分配。
我曾尝试根据您的伪代码编写插入函数。虽然我没有正确理解。无论如何,这是代码。
void array_insert(data_t list[], int& space_used, data_t value)
{
if(space_used == 0)
{
list[space_used] = value;
}
else
{
for(int i = space_used+1; i >= 0; i--)
{
if(value > list[i])
{
list[i+1] = value;
break;
}
else
{
list[i+1] = list[i];
}
if(i == 0)
{
list[i] = value;
}
}
}
space_used++;
}
终于完成了,这是完整的代码。感谢Mark和Casablanca的帮助
答案 0 :(得分:4)
您必须移动所有元素以为新元素腾出空间。这是O(n)操作。由于你不能做得比O(n)更好,我认为使用这个简单的O(n)算法是合理的:
这假设您的数组有空间来插入额外的元素。
答案 1 :(得分:2)
您可以使用binary search找到插入位置。
答案 2 :(得分:2)
考虑插入时需要完成的单独任务:
n
array[n]
前两个步骤很容易就是他们自己的功能,可以帮助你在心理上分离任务:
n = index_to_put(float new_element, float *array, int array_max, int last_used);
new_last_used = move_cells_up(float *array, n, int array_max, int last_used);
array[n] = new_element; last_used = new_last_used;