我有一个排序,我需要插入元素并将其保存到子句binary-search
es调用。我应该使用什么算法?或者这可能是一个过早的优化,我应该只插入元素并调用shell-sort(我将实现替换为current)?
如果这些信息有用:元素的数量可能很大。它是真正可变的,可以容纳1到10甚至1到1000+个元素。如果你很好奇为什么这个变量太多了,我正在写一个解析。
答案 0 :(得分:0)
如果数组的大小不能再适合任何更多的条目,则需要分配另一个更大的数组,将所有条目移动到新条目所在的位置,将条目放在那里,最后移动其余条目比他们高一个位置。之后,您可以释放较旧且现在太小的阵列并保留新阵列。您可以使用memmove
或memcpy
来执行此操作。
这样做,当你需要分配一个新的更大的数组时,你应该分配比你想要的更大的数据(内存页面大小的倍数会很好),否则所有的分配和释放将是昂贵的
示例:
int *array[] = malloc(3*sizeof(int));
array[0] = 0;
array[1] = 2;
array[2] = 3;
// To insert 1 for example you will have to do...
int *new_array[] = malloc(4*sizeof(int)); // Just for the example I make a tight fit, on the code you should allocate it a bit bigger if you expect more inserts to avoid unnecessary mallocs and frees
memmove(new_array,array,sizeof(int)); // Moving the 0
new_array[1] = 1; // Inserting the new element
memmove(new_array[2],array[1],2*sizeof(int)); // Moving the 2 and 3
free(array); // Get rid of the old array
array = new_array;
new_array = NULL;