C++ &引用;插入排序直到定位;算法很奇怪而且不';t工作得不太好(C+;+;实现)
为了更好地理解每一种排序算法,我正在阅读教授的讲座并实现他的代码 我们检查了插入排序,发现有3种不同的类型: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
- 规则插入排序
- 插入排序直到找到为止
- 带标志的插入排序
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]);
}
}
...
}