为什么我的插入排序算法会改变给定数组中的数字? (C++)
Why is my insertion sort algorithm altering numbers in the given array? (C++)
我有一个 C++n 插入排序函数模板,当我给函数一个整数数组时它工作正常,但是当我给函数一个双精度数组时,虽然数组确实在之后排序,由于某种原因,它改变了排序数组中的数字。
代码:
#include <iostream>
#include <stdlib.h>
using namespace std;
template <typename T>
void insertionSort(T ary[10], int size)
{
// Printing unsorted array
cout << "Array before sorting: [";
for (int i = 0; i < size; i++)
{
cout << ary[i] << ", ";
}
cout << "]" << endl;
// Beginning of sorting
int j, t;
for(int i = 1; i < size; i++)
{
for (int i = 0; i < size; i++)
{
j = i;
while(j > 0 && ary[j] < ary[j-1])
{
t = ary[j];
ary[j] = ary[j-1];
ary[j-1] = t;
j--;
}
}
}
// Printing sorted array
cout << "Array after sorting: [" ;
for (int i = 0; i < size; i++)
{
cout << ary[i] << ", ";
}
cout << "]\n" << endl;
}
int main()
{
cout << "*** INTEGER ARRAY INSERTION SORT ***" << endl;
int intAry[10] = {0};
for (int i = 0; i<= 9; i++)
{
intAry[i] = rand() % 100;
}
insertionSort(intAry, 10);
cout << "*** DOUBLE ARRAY INSERTION SORT ***" << endl;
double dAry[10] = {0};
for(int i = 0; i<=9; i++)
{
dAry[i] = (double)rand() / RAND_MAX * 100;
}
insertionSort(dAry, 10);
return 0;
}
输出:
你可以在这里看到它改变了双精度数组中的数字,比如 14.1603 到 14。
感谢您的帮助!
问题是,您想比较双数,但是当您进行循环时,您使用了 int i 和 int j 变量。由于数据类型不兼容,结果不正确。
如果你隐藏“双”的“int”数据类型,你的问题将得到解决。
此外,您必须将数组类型更改为双精度。
我有一个 C++n 插入排序函数模板,当我给函数一个整数数组时它工作正常,但是当我给函数一个双精度数组时,虽然数组确实在之后排序,由于某种原因,它改变了排序数组中的数字。
代码:
#include <iostream>
#include <stdlib.h>
using namespace std;
template <typename T>
void insertionSort(T ary[10], int size)
{
// Printing unsorted array
cout << "Array before sorting: [";
for (int i = 0; i < size; i++)
{
cout << ary[i] << ", ";
}
cout << "]" << endl;
// Beginning of sorting
int j, t;
for(int i = 1; i < size; i++)
{
for (int i = 0; i < size; i++)
{
j = i;
while(j > 0 && ary[j] < ary[j-1])
{
t = ary[j];
ary[j] = ary[j-1];
ary[j-1] = t;
j--;
}
}
}
// Printing sorted array
cout << "Array after sorting: [" ;
for (int i = 0; i < size; i++)
{
cout << ary[i] << ", ";
}
cout << "]\n" << endl;
}
int main()
{
cout << "*** INTEGER ARRAY INSERTION SORT ***" << endl;
int intAry[10] = {0};
for (int i = 0; i<= 9; i++)
{
intAry[i] = rand() % 100;
}
insertionSort(intAry, 10);
cout << "*** DOUBLE ARRAY INSERTION SORT ***" << endl;
double dAry[10] = {0};
for(int i = 0; i<=9; i++)
{
dAry[i] = (double)rand() / RAND_MAX * 100;
}
insertionSort(dAry, 10);
return 0;
}
输出:
你可以在这里看到它改变了双精度数组中的数字,比如 14.1603 到 14。
感谢您的帮助!
问题是,您想比较双数,但是当您进行循环时,您使用了 int i 和 int j 变量。由于数据类型不兼容,结果不正确。 如果你隐藏“双”的“int”数据类型,你的问题将得到解决。
此外,您必须将数组类型更改为双精度。