C++ 插入排序不排序第一个元素?

C++ 插入排序不排序第一个元素?,c++,algorithm,insertion-sort,C++,Algorithm,Insertion Sort,我的插入排序的实现似乎在对第一个元素进行排序的情况下工作。我这里有一个小测试用例。谁能告诉我我的算法有什么问题吗 #include <iostream> #include <string> #include <stdlib.h> using namespace std; void Insert(int *S, int k) { int key = S[k]; int j = k-1; while(j>

我的插入排序的实现似乎在对第一个元素进行排序的情况下工作。我这里有一个小测试用例。谁能告诉我我的算法有什么问题吗

#include <iostream>
#include <string>
#include <stdlib.h>
using namespace std;



void Insert(int *S, int k)
{
        int key = S[k];
        int j = k-1;
        while(j>0 && S[j] > key)
        {
                S[j+1] = S[j];
                j--;
        }

        S[j+1] = key;
}


void Insertionsort(int S[], int n)
{
        if(n>1)
                Insertionsort(S,n-1);
        Insert(S,n);

}

int main()
{
        srand ( time(NULL) );
        int S1_8[8];
        for(int i=0; i<8; i++)
                S1_8[i] = rand()%100;

        Insertionsort(S1_8,8);

        for(int i=0; i<8; i++)
        {
                cout << S1_8[i] << endl;
        }

        return 0;
}
#包括
#包括
#包括
使用名称空间std;
无效插入(int*S,int k)
{
int key=S[k];
int j=k-1;
while(j>0&&S[j]>键)
{
S[j+1]=S[j];
j--;
}
S[j+1]=键;
}
void Insertionsort(int S[],int n)
{
如果(n>1)
插入排序(S,n-1);
插入(S,n);
}
int main()
{
srand(时间(空));
int S1_8[8];

对于(int i=0;i第一次调用
Insert
,它被传递
int key=S[8];

S[8]
不在数组范围内

那样做

void Insertionsort(int S[], int n)
{
        if(n>1)
                Insertionsort(S,n-1);
        Insert(S,n-1);

}
而且,在你的情况下,它必须是

while(j>=0 && S[j] > key)

它没有解释问题,但在上一次迭代中,当调用
Insert(S,8)
时,肯定存在问题。根据
Insert
函数的定义,该函数将访问
S[8]
,这是一个不存在的元素。+1,但您也将while循环中的条件更改为
j>=0
,而不是
j>0
。这是正确的,但应该在回答中提及和解释。谢谢双方。如果我想计算
Insert
进行的组件级比较的数量,我是否增加了计数器inside while循环还是在while循环之外?这只在S[j]>key为true时才算。当S[j]>key为true时,我是否仍然需要递增?因此,在内部和外部都有一个递增的计数器?只进行了一次比较,而在while内部没有捕获到。也就是说,while遇到
S[j]