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

时间:2016-11-11 14:24:12

标签: c arrays sorting insertion-sort

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

A = pd.DataFrame(index=pd.date_range(start='2016-01-15', periods=10, freq='B'))
B = pd.DataFrame(index=pd.date_range(start='2016-01-01', periods=5, freq='W'))
A["X"] = np.random.rand(A.shape[0])
A["Y"] = np.random.rand(A.shape[0])
A["Z"] = np.random.rand(A.shape[0])


B["X"] = np.random.rand(B.shape[0])
B["Y"] = np.random.rand(B.shape[0])
B["Z"] = np.random.rand(B.shape[0])

A = A.stack(dropna=False).reset_index(level=1)
B = B.stack(dropna=False).reset_index(level=1)

ss = pd.merge(A.reset_index(),B.reset_index(), how='outer', on="index", sort=True).set_index("index")
ss["level_1"] = ss["level_1_x"].fillna(ss["level_1_y"])
ss = ss.drop(["level_1_x", "level_1_y"], axis=1)
w = ss.reset_index().pivot(index='index', columns="level_1", values='0_y').ffill().stack(dropna=False).reset_index(level=1)

A['weight'] =  w[w.index.isin(A.index)][0]

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

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

1 个答案:

答案 0 :(得分:0)

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

这些循环

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]具有不确定的值。此外,如果条件number<a[j]未评估为true,则不会向数组添加任何内容。

函数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 

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