gpt4 book ai didi

c - 在输入值的同时对数组进行排序

转载 作者:太空宇宙 更新时间:2023-11-04 04:26:55 25 4
gpt4 key购买 nike

我需要在输入值时对数组进行排序,这意味着当用户输入数字时,数组需要自行排序:到目前为止我所做的是:

void MoveRight(int *a,int n, int startIndex)
{
int j,temp;
j=n-1;
for(int i=startIndex;i<n;i++)
{
temp = a[j];
a[j]=a[i];
a[i]=temp;
}
}

void InsertionSort(int *a,int n)
{
int i,number,j;
printf("Enter %d numbers for the array\n",n);
for(i=0;i<n;i++)
{
scanf("%d",&number);
for(j=0;j<=i;j++)
{
if(number<a[j])
{
MoveRight(a,n,j);
a[j]=number;
break;
}
}
}
}

输入后:1,3,2,4,5

我得到的数组是:-858993460,-858993460,-858993460,-858993460,-858993460

最佳答案

要应用选择排序,您应该首先输入数组中的所有元素。

这些循环

for(i=0;i<n;i++)
{
scanf("%d",&number);
for(j=0;j<=i;j++)
{
if(number<a[j])
{
MoveRight(a,n,j);
a[j]=number;
break;
}
}
}

已经导致未定义的行为,因为当 ij等于 0 那么 a[j]具有不确定的值(value)。而且如果条件 number<a[j]未评估为真,则不会向数组添加任何内容。

函数MoveRight没有意义,因为在循环变量中 j没有改变。

j=n-1;
for(int i=startIndex;i<n;i++)
{
temp = a[j];
a[j]=a[i];
a[i]=temp;
}

这是一个演示程序,展示了如何完成任务。

#include <stdio.h>

void MoveRight( int *a, int n, int i )
{
for ( ; n != i; --n ) a[n] = a[n-1];
}

#define N 10

int main(void)
{
int a[N];

printf( "Enter %d numbers for the array: ", N );

for ( int i = 0; i < N; i++ )
{
int value;

scanf( "%d", &value );

int j = 0;
while ( j < i && !( value < a[j] ) ) j++;

MoveRight( a, i, j );
a[j] = value;
}

for ( int i = 0; i < N; i++ ) printf( "%d ", a[i] );
printf( "\n" );

return 0;
}

程序输出可能如下所示

Enter 10 numbers for the array: 5 2 3 9 8 1 6 7 4 0
0 1 2 3 4 5 6 7 8 9

考虑到对于大型数组,使用二进制搜索而不是顺序搜索来查找插入下一个值的位置要好得多。

关于c - 在输入值的同时对数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40550001/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com