将值插入排序数组中而不重复:C++
Inserting value into sorted array without duplicates: C++
对于这个程序,我有三个数据文件。第一个是数字列表,第二个是带有add(a)或delete(D)命令的数字列表。我必须将第一个文件中的数字放入第三个文件,然后根据第二个文件中命令和数字更新最终文件。第三个文件不能重复,必须在插入值时进行排序。以下是我的函数,我很难在没有重复的情况下将项目存储到数组中。数组必须是静态大小的,我做了一个最大大小为2000的#define,这足以处理我需要的数字。非常感谢!如果我应该上传main,请告诉我,但我很确定问题出在其中一个函数上。
int search(int value, int list[], int n) // returns index, n is logical size of array
{
int index = -1;
for(int i = 0; i < n; i++)
{
if(value == list[i])
{
index = i;
return index;
}
}
return index;
}
void storeValue(int value, int list[], int& n)
{
int i = n;
for(; i > 0 && list[i - 1] < value; i--)
{
list[i] = list[i - 1];
}
list[i] = value;
n++;
}
void deleteValue(int loc, int list[], int n)
{
if(loc >= 0 && loc < n)
{
for(int i = loc; i < n - 1; i++)
list[i] = list[i +1];
n--;
}
}
更新:现在正在存储重复项,但仅针对某些数字。例如:我的第三个文件是:1,2,8,8,9101101104等。输出应为:1,2,8,9101104等value:要插入的值list[]:正在修改的数组(必须是静态的)n: 阵列的逻辑大小我不明白为什么有些数字重复而另一些数字没有在我的主体中,我运行搜索函数,如果返回-1(还没有找到值),那么我运行storeValue函数。
以下是我更新的功能:
int search(int value, int list[], int n) // returns index
{
int index = -1;
for(int i = 0; i < n; i++)
{
if(value == list[i])
{
index = i;
return index;
}
}
return index;
}
void storeValue(int value, int list[], int& n)
{
int i = n;
for(; i > 0 && list[i - 1] > value; i--)
{
list[i] = list[i - 1];
}
list[i] = value;
n++;
}
void deleteValue(int loc, int list[], int& n)
{
if(loc >= 0 && loc < n)
{
for(int i = loc; i < n; i++)
{
if (i == loc)
{
list[i] = list[i + 1];
i++;
}
}
n--;
}
}
在deleteValue函数中,您正在删除该值,但最终会出现重复,因为您只是将当前索引重新分配给下一个值。例如,如果您有数组:
char array[3] = [1, 2, 3];
如果你想删除第二个整数,你的函数目前会输出这个:
[1, 3, 3]
你想做的是制作一个新的数组,并在整个列表中循环,确保去掉最后一个元素,如下所示:
char* deleteValue(int loc, int list[], int n)
{
char* newArray[n - 1];
if (loc >= 0 && loc < n)
{
for (int i = 0; i < n - 1; i++)
{
if (i == loc) // You have arrived at the element that needs to be deleted
{
newArray[i] = list[i + 1];
i++; // So we skip over the deleted element
}
else
newArray[i] = list[i];
}
}
return newArray;
}
这应该考虑到最后一个值重复的情况。
相关文章:
- 这是插入排序的正确实现吗?
- 使用列表 STL 递归进行插入排序
- 列表 iter 不取消引用 使用列表进行插入排序
- 如何使插入排序更快?
- 插入排序的最小交换
- 双链表C++上的插入排序
- 如何在插入排序中使用 replace() 使语句变得不必要
- C++插入排序错误功能不起作用
- 如何在不通过插入排序更改原始矢量的情况下对 2D 矢量进行排序
- 插入排序打印错误的输出
- 从矢量末尾开始的插入排序
- 插入排序:我做错了什么?
- 插入排序的向量<unique_ptr<对时避免堆分配<>>>
- 获取有趣的输出以进行插入排序
- 插入排序算法在放入函数时的行为不同
- 插入排序的Valgrind Invalid读取尺寸8的尺寸
- 插入排序与插入/擦除?(所以我需要对一个向量进行排序,而不是手工做事,而是使用插入和擦除
- 堆排序和插入排序
- 计数Heapsort和插入排序中的复制和比较数
- 使用第二个数组C 插入排序算法