问题 -
以这样的方式对数组进行排序:大于第一个元素的数字位于右侧且小于第一个元素位于左侧
示例输入 -
5
4 5 3 7 2(以4为参考)
示例输出
3 2 4 5 7
我的代码以这种方式排序
的输入
5
12
16
2
3
56
输出
2 2 3月2
3
56
int main()
{
int i,j,n,temp;
printf("enter no of elements of array");
scanf("%d",&n);
int a[n];
printf("enter array\n");
for(i=0;i<=n-1;i++)
{
scanf("%d",&a[i]);
}
j=0;
for(i=1;i<=n-1;i++)
{
if(a[i]<a[j])
{
temp=a[j];
a[j]=a[i];
a[i]=a[j];
j++;
}
}
for(i=0;i<n;i++)
{
printf("Array is%d\n",a[i]);
}
}
答案 0 :(得分:2)
首先,
temp=a[j];
a[j]=a[i];
a[i]=a[j];
应该是
temp=a[j];
a[j]=a[i];
a[i]=temp;
这解释了重复。但是一旦你排序了(哈哈)那你就会发现它不太正确,因为你只将每个数字与它的邻居进行比较 - 如果数组中的最后一个数字是最小的呢? - 您只能提前将其移动到一个位置(例如,5个数字列表中的第4个位置)。
答案 1 :(得分:1)
for(i=1;i<=n-1;i++)
{
if(a[i]<a[j])
{
temp=a[j];
a[j]=a[i];
a[i]=a[j];// change to a[i]=temp;
j++;
}
}
在此循环中,您只尝试对数组元素进行排序。你必须修改你的排序机制,纠正交换函数的最后一个语句。
答案 2 :(得分:1)
此外,在您的计划中,您有一个variable length array which isn't valid in standard C.
printf("enter no of elements of array");
scanf("%d",&n);
int a[n];
它可能有效,但如果您尝试初始化为任何值或零,则可能会遇到以下错误。
[Error] variable-sized object may not be initialized
这里a[n]
将在堆栈上分配内存,这对于大型内存来说并不是很好。
您只能使用常量定义数组的长度。 (如)
int a[10];
答案 3 :(得分:0)
j=0;
for(i=1;i<=n-1;i++){
if(a[i]<a[0]){
temp=a[j+1];
a[j+1]=a[i];
a[i]=temp;
j++;
}
}
temp = a[0];
a[0] = a[j];
a[j] = temp;