我在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] << ' ';
}
}
答案 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;
}
}
}