复制数组和冒泡排序c ++

时间:2012-05-17 18:46:28

标签: c++ arrays sorting bubble-sort

好的,所以一切正常,除了排序数据有时输出整数而不是十进制数。这似乎是一个容易修复的错误,但我找不到它!

#include <iostream>

using namespace std;

void input (double x[], int length);
void copy (double source[], double dest[], int length);
void sort (double x[], int length);
void display (double x[], int length);
int main()
{
    double data[20];
    double sdata[20];
    int itemcount;

    cout << "Enter data item count <1-20>" << endl;
    cin >> itemcount;
    if ((itemcount < 1) || (itemcount > 20))
    {
        cout << "Class size is NOT within required range. The required range is 1 to 20." << endl;
        cout << "Bye." << endl;
        return (0);
    }
    input (data, itemcount);
    cout << "Original Data:" << endl;
    copy (data, sdata, itemcount);
    display (sdata, itemcount);
    sort (sdata, itemcount);
    cout << "Sorted Data" << endl;
    display (sdata, itemcount);

}

void input (double x[], int length)
{
    int i;
    for (i=0; i < length; i++)
    {
        cout << "Enter score" << endl;
        cin >> x[i];
    }
}

void copy (double source[], double dest[], int length)
{
    int i;
    for (i=0; i < length; i++)
    {
        dest[i] = source[i];
    }
}

void sort (double x[], int length)
{
    int i, temp;
    bool swapdone = true;
    while (swapdone)
    {
        swapdone = false;
        for (i=0; i < length-1; i++)
        {
            if (x[i] > x[i+1])
            {
                temp = x[i];
                x[i] = x[i+1];
                x[i+1] = temp;
                swapdone = true;
            }
        }
    }
}

void display (double x[], int length)
{
    int i;
    for (i=0; i < length; i++)
    {
        cout << x[i] << " ";
    }
    cout << endl;
}

在示例运行中,结果是:

Enter data item count <1-20>
5
Enter score
30.41
Enter score
63.25
Enter score
62.47
Enter score
40.25
Enter score
310.41
Original Data:
30.41 63.25 62.47 40.25 310.41
Sorted Data
30.41 40.25 62 63 310.41

4 个答案:

答案 0 :(得分:4)

temp应该是double,而不是int,如果您不希望分配给它的内容变为整数。

答案 1 :(得分:1)

如果仅使用“i”作为计数器,则可以在for循环中声明它,例如

for (int i=0;i<length;i++)

这样可以省去一些麻烦。无论如何,

更改 int i, temp;

int i;
double temp;

Double表示它可以包含十进制数,整数表示整数。当你交换进行冒泡排序时,它会将你的double转换为整数类型。您的编译器应该给出类型转换错误,但应该编译。

答案 2 :(得分:0)

试试这个:

 double tmp;
 std::cout << ios_base::setpercision(3) << tmp;

答案 3 :(得分:0)

检查

int i, temp;

temp必须加倍!