为什么我的插入排序算法会改变给定数组中的数字? (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”数据类型,你的问题将得到解决。

此外,您必须将数组类型更改为双精度。