我在C中需要一个addArray函数,它将给定元素添加到给定数组中,确保每个元素都插入到数组中的正确位置,以便整数的顺序按升序排列。
我可以获得此功能的任何帮助。
int addToArray(int *array, int size, int selectedNum){
//printf("Selected number is %d \n", selectedNum);
int indexToInsert=0;
if(size==0){
array[indexToInsert]=selectedNum;
size=1;
indexToInsert++;
return size;
}
else{
for(int i=size; i<=1; i--){
if(selectedNum>array[i]){
indexToInsert=i-1;
break;
}
else{
}
}
if(indexToInsert>0){
for(int j=size-1; j>indexToInsert; j--){
array[j+1]=array[j];
}
array[indexToInsert]=selectedNum;
size = size+1;
printf("Size incremented to %d\n", size);
return size;
}
要求是:不要简单地将元素添加到数组并进行排序。它必须存储在正确的索引中。这就是我对此功能的要求。它工作不正常。主程序提示用户,直到输入负数,并且每个正数都按升序添加到数组中。
答案 0 :(得分:2)
当在中间或任何随机位置有大量插入操作时,数组的选择不是很明智,因为将数组的其余部分(插入后)元素移动+1位置将非常昂贵的事件。
更好的方法:使用multimap或priority-queue,默认情况下以升序存储值,允许重复值作为键。然后从映射的开始到结束迭代以将键存储在数组中。
TC: O(NlogN) for insertions + O(N) for last traversal of map => O(NlogN).
如果您仍想使用数组而没有其他数据结构,请在执行插入操作时使用binary search mechanism。
TC: O(NlogN) for insertions + O(N^2) for moving => O(N^2).
Worst case scenario: when the input stream is in descending order, and
the final array is expected to be in ascending order.