这是我的功能:
int main() {
double data[100];
int num;
cout<<"num= ";
cin>>num;
for(int i = 1; i <= num; i++) {
cout<<i<<" element = ";
cin>>data[i];
}
Sort(data, num);
for (int i = 1; i <= num; i++) {
cout<<data[i]<<endl;
}
return 0;
}
void Sort(double data[], int n) {
int i,j,k;
double min;
for(i = 0; i < n-1; i++) {
k = i;
min = data[k];
for(j = i+1; j < n; j++)
if(data[j] < min) {
k = j;
min = data[k];
}
data[k] = data[i];
data[i] = min;
}
}
如果我为exp写的话。三个元素:8,9,1再次cout 8,9,1?
答案 0 :(得分:1)
for(int i = 1; i <= num; i++) { // WRONG
我认为你的意思是:
for(int i = 0; i < num; i++) { // RIGHT
C中的数组是0索引记住。
答案 1 :(得分:1)
你的排序功能很好。唯一的问题是您在1
到n
的位置输入了元素,包括0
到n-1
的{{1}},{{1}功能。
如果您需要通过main()
打印数字1
,请使用
n
答案 2 :(得分:1)
你应该在for循环中使用0索引begin
for(int i = 0; i < N; ++i)
因此修复这两个索引错误将使您的代码正常运行。
原因是:
如果使用data[]
作为开头将数据写入1
,则数据数组的第一项将是一个随机数:
如果插入3个元素,则数组将如下所示:
data[0] = ??? // maybe a very very big number
data[1] = 8
data[2] = 9
data[3] = 1
在您的Sort函数中,索引从0开始,在num
之前结束,这意味着您的代码只会对data[0], data[1], data[2]
进行排序。
如果您使用:num = 3,3 2 1作为原始代码的输入数据,您可以看到3和2已排序
我猜你的排序代码是从某个地方用Google搜索的,请尝试理解它。
良好的在线算法课程:https://www.coursera.org/course/algs4partI
一个非常好的算法在线书籍:http://algs4.cs.princeton.edu/home/
顺便说一下,for(j = i+1; j < n; j++)
函数中的Sort
如果有{
}
个大括号会更好。