关于网友提出的“ 插入排序和书上的代码一样为什么排错了”问题疑问,本网通过在网上对“ 插入排序和书上的代码一样为什么排错了”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:
问题: 插入排序和书上的代码一样为什么排错了
描述:插入算法
代码如下
#include
#include"InsertSort.h"
int main()
{
using namespace std;
int array[9] = {3,1,4,1,5,9,2,6,5};
insertsort(array, 9);
for (int i = 0; i < 9; i++)
{
cout << array[i] << " ";
}
return 0;
}
另一段是
template
void insertsort(T array[], int N)
{
int j = 0;
for (int i = 1; i < N; i++)
{
T temp = array[i];
for (int j = i; j > 0 && temp < array[j - 1]; j--)
array[j] = array[j - 1];
array[j] = temp;
}
}
显示的结果是这样

存在一种情况,结果是正确的,输入为
9,8,7,6,5,4,3,2,1时,结果是正确的
我编了一个交换函数
template
void swap(T& a, T& b)
{
T temp;
temp = a;
a = b;
b = temp;
}
把插入函数改成这样后运行结果正确
#include"Swap.h"
template
void insertsort(T array[], int N)
{
int j = 0;
for (int i = 1; i < N; i++)
{
T temp = array[i];
for (int j = i; j > 0 && temp < array[j - 1]; j--)
swap(array[j], array[j - 1]);
}
}

可是我觉得书上那种算法仅仅赋值,不调用函数运行更快,
求大神分析为什么不对,万分感谢
解决方案1:
原来是这样啊,内循环里不要定义j了,去掉int就好了,不然用到的j是刚进int时候定义的j,永远是0,所以答案不对
template
void insertsort(T array[], int N)
{
int j = 0;
for (int i = 1; i < N; i++)
{
T temp = array[i];
for (j = i; j > 0 && temp < array[j - 1]; j--)
array[j] = array[j-1];
array[j] = temp;
}
}
以上介绍了“ 插入排序和书上的代码一样为什么排错了”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:http://www.codes51.com/itwd/3608962.html