将元素插入到已排序的数组中

时间:2013-03-16 20:43:26

标签: c arrays sorting

我有一个排序,我需要插入元素并将其保存到子句binary-search es调用。我应该使用什么算法?或者这可能是一个过早的优化,我应该只插入元素并调用shell-sort(我将实现替换为current)?

如果这些信息有用:元素的数量可能很大。它是真正可变的,可以容纳1到10甚至1到1000+个元素。如果你很好奇为什么这个变量太多了,我正在写一个解析。

1 个答案:

答案 0 :(得分:0)

如果数组的大小不能再适合任何更多的条目,则需要分配另一个更大的数组,将所有条目移动到新条目所在的位置,将条目放在那里,最后移动其余条目比他们高一个位置。之后,您可以释放较旧且现在太小的阵列并保留新阵列。您可以使用memmovememcpy来执行此操作。

这样做,当你需要分配一个新的更大的数组时,你应该分配比你想要的更大的数据(内存页面大小的倍数会很好),否则所有的分配和释放将是昂贵的

示例:

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;