我想对大小为a[]
的数组s
的成员进行排序。我首先使用函数来获取元素,然后使用另一个函数按升序对它们进行排序。问题出在sort函数中,或者在main函数中或者在两者中,因为程序的执行在输入数据之后就结束了。这里有人可以帮助我吗?
#include <iostream>
using namespace std;
void getdata() {
int s;
cin >> s;
int a[s];
for (int i=0; i<s; i++) {
cin >> a[i];
}
}
void sort(int a[], int s) {
for (int i=0; i<s-1; i++) {
for (int j=i+1; i<s; i++) {
if (a[i] > a[j]) swap(a[i], a[j]);
}
}
}
int main () {
int a[100],s;
getdata();
sort(a, s);
return 0;
}
答案 0 :(得分:1)
您在getdata()
函数中有一个本地的数组定义:
void getdata() {
int s;
cin >> s;
int a[s]; // <<<
它保留在那里,与你在main中声明的数组无关:
int main () {
int a[100],s; // <<<
你必须编写你的函数,它将这些作为参数:
void getdata(int* a, int& s) {
cin >> s;
for (int i=0; i<s; i++) { // ...
并在主要电话中
int main () {
int a[100],s;
getdata(a,s);
sort(a, s);
return 0;
}
更新:
sort()
函数的内部for循环中的条件看起来也很错误,你可能认为j
没有i
:
for (int j=i+1; i<s; i++) {
// ^ ^
答案 1 :(得分:0)
如果使用数组没有明确的优势,请始终使用std::vector
(如果在编译时已知s,则在C ++ 11中使用std::array
。)
#include<vector>
#include<algorithm>
std::vector<int> a;
//fill it, then
std::sort(a.begin(),a.end());