我想對一個陣列從大到小進行排序,并建立一個新的陣列,該陣列已被排序。
所以這里是我的代碼:
#include <iostream>
使用 命名空間 std.com.cn>。
int main()
{
int size, sum = 0, answer = 0, pos, max;
int array[size];
int array2[size];
cin >> size。
for (int i = 0; i < size; i )
{
cingt;> array[i];
sum =array[i];
}
for (int i = 0; i < size; i )
{
max = 0;
pos = 0;
for (int q = 0; q < size; q )
{
if (array[q] > max)
{
max = array[q];
pos = q;
}
}
array2[i] = max;
array[pos] = 0;
}
for (int i = 0; i < size; i )
{
cout << array2[i] << ", ";
}
return 0;
}
當我把我的輸入:
5
1 2 3 4 5
我得到的輸出是:
0, 0, 0, 0, 5,
但我希望它是5、4、3、2、1,
uj5u.com熱心網友回復:
首先,當你創建一個變數時,一定要初始化它,因為在C 中默認它有一些垃圾值。
此外,你正試圖分配一個尚未分配給它的大小變數(作為陣列的大小),這將產生問題。其次,你先初始化一個陣列,然后從用戶那里獲取大小變數,這與流程完全相反,關于創建具有動態大小的陣列,請參閱
編輯:
按照@PaulMcKenzie的方法,另一種被認為是合適的方法,使用std::Vector方法來初始化C 中的動態陣列,在visual studio中使用第一種方法的人可能會面臨錯誤,
第二種方法
第二種方法的更新代碼: 第二個輸出 uj5u.com熱心網友回復: 陣列變數的大小必須是一個編譯時的常數。用戶在運行時提供的值在編譯時可能是不知道的。所以我建議使用 輸出:
標籤:#include <iostream>
#include <vector>
using namespace std;
int main()
{
int size=0, sum = 0, answer = 0, pos, max;
cin >> 大小。
std:: vector<int> array(size), array2(size)。
for (int i = 0; i < size; i )
{
cingt;> array[i];
sum =array[i];
}
for (int i = 0; i < size; i )
{
max = 0;
pos = 0;
for (int q = 0; q < size; q )
{
if (array[q] > max)
{
max = array[q];
pos = q;
}
}
array2[i] = max;
array[pos] = 0;
}
for (int i = 0; i < size; i )
{
cout << array2[i] << ", ";
}
return 0;
}
std::vector而不是array.#include <iostream>
#include<vector>
#include <algorithm>
int main()
{
int size=0, input=0;
std::cout << "輸入大小:"。
std::cin >> size。
std::vector<int> vec;
for (size_t i{ 0 }; i < size; i)
{
std::cout << "enter"<<i<< .input:";
std::cin >> input;
vec.push_back(input)。
}
//將向量的元素按降序排序。
for (const auto& i : vec)
std::sort(vec.begin(), vec.end(), std:: greater < > ();
//列印向量的元素。
for (const auto& i : vec)
std::cout << i << " , ";
return 0;
}
enter size :5.
輸入0.input:1
輸入1.input:2
輸入2.input:3
輸入3.input:4
輸入4.input:5
5 ,4 ,3 ,2 ,1 。

