【发布时间】:2014-03-08 14:24:43
【问题描述】:
#include<stdio.h>
#include<stdlib.h>
int main()
{
int i,n,min,j;
int *array;
printf("The no of elements >> ");
scanf("%d\n",&n);
printf("Making array\n" );
array = (int *)malloc (sizeof(int) * n);
printf("array made!\n");
//INPUT NUMBERS
for (i=0 ; i<n ; i++)
{
printf(">>Enter the element %d\n" , i+1);
scanf("%d\n", &array[i]);
}
//SORT THE ARRAY
for (i = 0; i < n; ++i)
{
min = array[0];
for (int j = i+1; j < n; ++j)
{
if (array[i] > array[j])
min = array[j];
}
if (min != array[i])
{
int temp;
temp = array[i];
array[i]= min;
array[j]=temp;
}
}
//PRINTING ARRAY
for (i=0 ; i<n ; i++)
{
printf("-- %d --\n" , array[i]);
};
}
我有这个在 c 中使用 Malloc 用于数组的 SelectionSort 的特定代码。但是,它在“元素数>>”之后经过两次输入,也不会排序。 如果我继续这样下去,它会以以下方式给我一个未排序的数组
The no of elements >> 5
4
Making array
array made!
>>Enter the element 1
5
>>Enter the element 2
2
>>Enter the element 3
1
>>Enter the element 4
7
>>Enter the element 5
8
-- 7 --
-- 1 --
-- 1 --
-- 2 --
-- 1 --
我已阅读其他一些帖子并更正了我的代码,但这仍然行不通。 不知道为什么。
编辑 1 通过对代码进行一些更改,双重输入的问题确实得到了解决。
int main()
{ int i,n,min,j;
int *array;
printf("The no of elements >> ");
scanf("%d",&n);
array = (int *)malloc (sizeof(int) * n);
for (i=0 ; i<n ; i++)
{
printf(">>Enter the element %d\n" , i+1);
scanf("%d", &array[i]);
}
//SORT THE ARRAY
for (i = 0; i < n; ++i)
{
min = array[i];
for (int j = i+1; j < n; ++j)
{
if (array[i] > array[j])
min = array[j];
}
if (min != array[i])
{
int temp;
temp = array[i];
array[i]= min;
array[j]=temp;
}
}
//PRINTING ARRAY
for (i=0 ; i<n ; i++)
{
printf("-- %d --\n" , array[i]);
};
}
但是,现在输入仍然不正确
The no of elements >> 5
Making array
array made!
>>Enter the element 1
5
>>Enter the element 2
4
>>Enter the element 3
6
>>Enter the element 4
9
>>Enter the element 5
2
-- 9 --
-- 2 --
-- 2 --
-- 2 --
-- 2 --
编辑 2 经过几次更正,距离最终代码仍有一些错误,我在
#include <stdio.h>
#include <stdlib.h>
int main()
{
int i,n,min,j;
int *array;
printf("The no of elements >> ");
scanf("%d",&n);
printf("Making array\n" );
array = (int *)malloc (sizeof(int) * n);
printf("array made!\n");
//INPUT NUMBERS
for (i=0 ; i<n ; i++)
{
printf(">>Enter the element %d\n" , i+1);
scanf("%d", &array[i]);
}
//SORT THE ARRAY
for (i = 0; i < n; i++)
{
min = i;
for ( j = i+1; j < n; j++)
{
if (array[j] < array[i])
min = j;
}
if (min != i)
{
int temp;
temp = array[i];
array[i]= array[min];
array[min]=temp;
}
}
//PRINTING ARRAY
for (i=0 ; i<n ; i++)
{
printf("-- %d --\n" , array[i]);
};
}
这导致了一个有点排序但仍然不正确的数组
The no of elements >> 5
Making array
array made!
>>Enter the element 1
4
>>Enter the element 2
5
>>Enter the element 3
2
>>Enter the element 4
1
>>Enter the element 5
7
-- 1 --
-- 4 --
-- 2 --
-- 5 --
-- 7 --
编辑 3:最终代码 我多次编辑代码以进行命中和试用。我终于发现这段代码可以正常工作了。
#include <stdio.h>
#include <stdlib.h>
int main()
{
int i,n,min,j;
int *array;
printf("The no of elements >> ");
scanf("%d",&n);
printf("Making array\n" );
array = (int *)malloc (sizeof(int) * n);
printf("array made!\n");
//INPUT NUMBERS
for (i=0 ; i<n ; i++)
{
printf(">>Enter the element %d\n" , i+1);
scanf("%d", &array[i]);
}
//SORT THE ARRAY
for (i = 0; i < n; ++i)
{
min = i;
for ( j = i+1; j < n; ++j)
{
if (array[j] < array[min])
min = j;
}
if (min != i)
{
int temp;
temp = array[i];
array[i]= array[min];
array[min]=temp;
}
}
//PRINTING ARRAY
for (i=0 ; i<n ; i++)
{
printf("-- %d --\n" , array[i]);
};
}
不过,我仍然想知道为什么 ++i /++j 分别与 i++/j++ 相比没有区别。
【问题讨论】: