Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/140.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_Insertion Sort - Fatal编程技术网

C++ C++;尝试插入排序失败?

C++ C++;尝试插入排序失败?,c++,sorting,insertion-sort,C++,Sorting,Insertion Sort,这段代码是维基百科上伪代码的直接翻译。但它不交换任何元素。有人能告诉我发生了什么事吗 #include<iostream> #include<string> #include<fstream> #include<cctype> #include<vector> using namespace std; void sortowanie(vector<int> v) { for(int i=1; i<=(int)

这段代码是维基百科上伪代码的直接翻译。但它不交换任何元素。有人能告诉我发生了什么事吗

#include<iostream>
#include<string>
#include<fstream>
#include<cctype>
#include<vector>
using namespace std;

void sortowanie(vector<int> v)
{
    for(int i=1; i<=(int)v.size()-1; i++)
    {
        for(int j=i; j>0; j--)
        {
            if(v[j-1] > v[j])
            {
                int x = v[j-1];
                v[j-1] = v[j];
                v[j] = x;
            }
            else
            {
                break;
            }
        }
    }
}

int main()
{
    vector<int> v;
    v.push_back(4);
    v.push_back(2);
    v.push_back(15);
    v.push_back(234);
    v.push_back(21);
    v.push_back(6);
    v.push_back(3);
    v.push_back(53);
    v.push_back(23);
    v.push_back(1);

    sortowanie(v);
    for(int i=0; i<=(int)v.size()-1; i++)
    {
        cout << " -> " << v[i];
    }
    cout << endl;

    return 0;
}
#包括
#包括
#包括
#包括
#包括
使用名称空间std;
void sortowanie(向量v)
{
对于(int i=1;i0;j--)
{
如果(v[j-1]>v[j])
{
int x=v[j-1];
v[j-1]=v[j];
v[j]=x;
}
其他的
{
打破
}
}
}
}
int main()
{
向量v;
v、 推回(4);
v、 推回(2);
v、 推回(15);
v、 推回(234);
v、 推回(21);
v、 推回(6);
v、 推回(3);
v、 推回(53);
v、 推回(23);
v、 推回(1);
索托瓦尼(五);

对于(int i=0;i您正在通过值传递
std::vector
,因此将创建一个副本,并且仅对该副本进行更改:

void sortowanie(vector<int> v)
完整代码:

#include<iostream>
#include<vector>
using namespace std;

void sortowanie(vector<int>& v)
{
    for(size_t i = 1; i < v.size(); i++)
    {
        for(int j = i; j > 0; j--)
        {
            if(v[j-1] > v[j]) { swap(v[j-1], v[j]); }
            else  {break;}
        }
    }
}

int main()
{
    vector<int> v({4,2,15,234,21,6,3,53,23,1});

    sortowanie(v);
    for(int x : v)
    {
        cout << x << " ";
    }
    cout << "\n";

    return 0;
}
#包括
#包括
使用名称空间std;
void sortowanie(vector&v)
{
对于(size_t i=1;i0;j--)
{
如果(v[j-1]>v[j]){swap(v[j-1],v[j]);}
else{break;}
}
}
}
int main()
{
向量v({4,2,15234,21,6,3,53,23,1});
索托瓦尼(五);
用于(整数x:v)
{

你不能按值传递向量,所以只对一个副本进行排序。改为按引用传递。更改一个字符后,我得到的输出是
->1->2->3->4->6->15->21->23->53->234
(int i=1;i@user4581301嗯,我可以问一下如何进一步改进上面的代码吗?我对缩短和清理代码并不太熟悉,主要是关于
的。一个旁注是转换。如果更改索引变量的类型,转换的需要就会消失。
(size\u t i=1;iSmurf。我把流氓
=
留在那里。代码应该是(size\u t i=1;i)的

#include<iostream>
#include<vector>
using namespace std;

void sortowanie(vector<int>& v)
{
    for(size_t i = 1; i < v.size(); i++)
    {
        for(int j = i; j > 0; j--)
        {
            if(v[j-1] > v[j]) { swap(v[j-1], v[j]); }
            else  {break;}
        }
    }
}

int main()
{
    vector<int> v({4,2,15,234,21,6,3,53,23,1});

    sortowanie(v);
    for(int x : v)
    {
        cout << x << " ";
    }
    cout << "\n";

    return 0;
}