C++ &引用;插入排序直到定位;算法很奇怪而且不';t工作得不太好(C+;+;实现)

C++ &引用;插入排序直到定位;算法很奇怪而且不';t工作得不太好(C+;+;实现),c++,algorithm,sorting,vector,C++,Algorithm,Sorting,Vector,为了更好地理解每一种排序算法,我正在阅读教授的讲座并实现他的代码 我们检查了插入排序,发现有3种不同的类型: 规则插入排序 插入排序直到找到为止 带标志的插入排序 我在实现时遇到的问题是插入排序,其内容如下: 与基本插入排序相同,只是j循环(内循环)在所定位的元素相对于前一个元素进行排序后立即终止。终止有效,因为前面的所有元素都已排序。算法如下: for i = 2 to n j = i while (a[j] < a[j-1]) and (j>1) s

为了更好地理解每一种排序算法,我正在阅读教授的讲座并实现他的代码

我们检查了插入排序,发现有3种不同的类型:

  • 规则插入排序
  • 插入排序直到找到为止
  • 带标志的插入排序
我在实现时遇到的问题是插入排序,其内容如下: 与基本插入排序相同,只是j循环(内循环)在所定位的元素相对于前一个元素进行排序后立即终止。终止有效,因为前面的所有元素都已排序。算法如下:

for i = 2 to n
   j = i
   while (a[j] < a[j-1]) and (j>1)
       swap (a[j],a[j-1]), set j=j-1
   endwhile
 endfor 
i=2到n的

j=i
而(a[j]1)
交换(a[j],a[j-1]),集合j=j-1
循环结束
结束

他的伪代码算法很奇怪,因为它假设数组在1开始,所以当我在C++中实现时,它显然不会对第一个元素进行排序。当我想要它时,开始假设0是我超出范围的第一个元素。我有义务做一个检查在外循环,这将允许一个成功的排序

这里是我以前使用的C++实现:

void insertionSortTilLocated(vector<int>vector)
{
    for (int i = 2; i < vector.size(); i++)
    {
        int j = i;
        while (vector[j] < vector[j - 1] && j > 1)
        {
            swap(vector[j], vector[j - 1]);
            j = j - 1;
        }
     }
     cout << "Insertion sort til located" << endl;
     for (int k = 0; k < vector.size(); k++)
     {
         cout << vector[k] << endl;
     }
}
void insertionSortTilLocated(向量向量)
{
对于(int i=2;i1)
{
交换(向量[j],向量[j-1]);
j=j-1;
}
}

非常有用:您的问题是(
for(int i=2;i
应该为零索引数组设置
i=1
。而
while
循环中的终止条件应该是
j>0
,而不是
j>1
。这样的参数命名
vectorvector
可能是个坏主意。
void insertionSortTilLocated(vector<int>vector)
{
    for (int i = 2; i < vector.size(); i++)
    {
        ...
        //Swap Check added
        if (vector[0] > vector[1])
        {
             swap(vector[0],vector[1]);
        }
     }
     ...
}