在c ++中对数组进行排序时,第一个元素变为0

时间:2017-05-17 14:09:08

标签: c++ arrays sorting

我在c ++中对数组进行排序,在第一个索引上打印0,忽略最高值。我的错在哪里?这是我的代码。 我的逻辑有什么问题吗?我是c ++的新手,很抱歉,如果我做错了什么。

#include<iostream>
#include<fstream>
#include<cstdlib>
using namespace std;
int main()
{
    int *x, size, temp;
    cout << "Enter the size of array\n";
    cin >> size;
    x = new int[size];
    for (int i = 0; i < size; i++)
    {
        cin >> x[i];
    }
    cout << "\nData before sorting: ";
    for (int j = 0; j < size; j++)
    {
        cout << x[j] << ' ';
    }
    for (int i = 0; i < size; i++)
    {
        for (int j = 0; j < size; j++)
        {
            if (x[j] > x[j + 1])
            {
                temp = x[j];
                x[j] = x[j + 1];
                x[j + 1] = temp;
            }
        }
    }
    cout << "\nData after sorting: ";
    for (int j = 0; j < size; j++)
    {
        cout << x[j] << ' ';
    }
}

2 个答案:

答案 0 :(得分:0)

带有更改的工作代码是

#include<iostream>
#include<fstream>
#include<cstdlib>
using namespace std;
int main()
{
    int *x, size, temp;
    cout << "Enter the size of array\n";
    cin >> size;
    x = new int[size];
    for (int i = 0; i < size; i++)
    {
        cin >> x[i];
    }
    cout << "\nData before sorting: ";
    for (int j = 0; j < size; j++)
    {
        cout << x[j] << ' ';
    }
    for (int i = 0; i < size; i++)
    {
        for (int j = 0; j < size-1; j++)
        {
            if (x[j] > x[j + 1])
            {
                temp = x[j];
                x[j] = x[j + 1];
                x[j + 1] = temp;
            }
        }
    }
    cout << "\nData after sorting: ";
    for (int j = 0; j < size; j++)
    {
        cout << x[j] << ' ';
    }
    cin >> temp;
}

在循环语句中将“size”更改为“size-1”以避免访问未分配的数组成员

答案 1 :(得分:0)

应该更正for循环,以便j一直运行到size - 1&amp; i一直运行到size。否则,你会在与不存在的数字进行不必要的比较时吞噬一个数字,从而在某些情况下显示零或垃圾数。

将以下for循环替换为您的程序可以解决您的问题。

for(int i=0;i<size;i++)
{
    for(int j=0;j<size-1;j++)
    {
        if(x[j]>x[j+1])
        {
            temp=x[j];
            x[j]=x[j+1];
            x[j+1]=temp;
        }
    }
}