Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 排序并插入C++;_C++_Sorting - Fatal编程技术网

C++ 排序并插入C++;

C++ 排序并插入C++;,c++,sorting,C++,Sorting,我在分类方面有个问题。我有两个功能。第一个将数字插入已排序的列表,第二个接收名为未排序的未排序列表,创建一个新列表,并重复调用第一个列表,直到新列表是未排序输入的排序版本。然后返回排序后的列表 我的理解是,第一个新列表是一个空列表,有点“排序”,并将每个元素逐个插入其中。但我的代码不知怎的不起作用。第一个函数通过了测试,但第二个函数没有通过。这是我的密码: void insertInOrder(list<int>& sorted, int number) { if (

我在分类方面有个问题。我有两个功能。第一个将数字插入已排序的列表,第二个接收名为未排序的未排序列表,创建一个新列表,并重复调用第一个列表,直到新列表是未排序输入的排序版本。然后返回排序后的列表

我的理解是,第一个新列表是一个空列表,有点“排序”,并将每个元素逐个插入其中。但我的代码不知怎的不起作用。第一个函数通过了测试,但第二个函数没有通过。这是我的密码:

void insertInOrder(list<int>& sorted, int number)
{
    if (sorted.empty())
        {sorted.push_back(number);
    else
    {
        for(list<int>::iterator I = sorted.begin();I!= sorted.end();I++)
        {
            if (*I <=number) 
            {
                sorted.insert((++I),number);// since I increases another time here
                --I;//decrease once back
                return;
            }
            else
            {   
                sorted.insert(I,number);
                return;
            }
        }
    }
}

std::list<int> reorder(std::list<int>& unsorted)
{
    std::list<int> ordered;
    for (list<int>::iterator J = unsorted.begin(); J!=unsorted.end(); J++)
    {
        insertInOrder(ordered, *J);
    }

    return ordered;
}
void insertinoder(列表和排序,整数)
{
if(sorted.empty())
{已排序。推回(数字);
其他的
{
for(list::iterator I=sorted.begin();I!=sorted.end();I++)
{

if(*I我认为您想要的是,如果要插入的值小于或等于当前节点,则不执行任何操作并继续循环,否则插入并返回。这当然可以写成:如果要插入的值大于列表中的当前节点,则将其插入到当前节点之后并退出循环

所以


您必须自己编写排序吗?您不能使用,例如?这是一个家庭作业,因此…您的插入排序只会在索引0或索引1处插入一个新项,因为无论比较结果如何,您都会在第一次循环迭代中插入它。查看
insertinoder
中的循环,无论您总是从函数。所以循环甚至不会完成一次迭代。是的,你是对的!但是如果我没有返回,我会让它插入很多次。所以也许我需要使用另一个算法?我不知道为什么,但我的编译器说(I+1)是不匹配的(它会给我一个很长的错误消息)。那为什么呢?@user3275943抱歉,是我的错。我忘了
std::list
使用的迭代器不是a,而是a,它没有该运算符。更新了我的代码。如果I在for循环中,并且每次循环后都会执行“++I”,我应该这样做吗?--I“在++I之后?我的意思是,额外的++I会影响I的值吗?THx@user3275943如果条件为真,则退出循环,因此无需执行类似操作
if (number > *I)
{
    sorted.insert(++I, number);  // Insert after current node
    break;                         // Exit loop
}