如果找不到,则排序数组中元素的FInd索引将打印应该插入的索引

时间:2017-07-11 04:10:27

标签: c arrays loops sorting search

在已排序的数组中打印要搜索的目标元素的索引。如果找不到该元素,则打印应该插入的索引,保持数组排序。

我用C编写了这个程序,但无法理解我哪里出错,它没有按预期工作。

    #include<stdio.h>
    int main(){
        int n,t,i,k=0,l=0;
        int arr[50];
        scanf("%d",&n);
        for(i=0;i<n;i++){
                scanf("%d",&arr[i]);
        }
        scanf("%d",&t);
        // Array size should be less than 50
        if(n>50){
                printf("Array size exceeded");
                return 0;
        }
        //Check array is sorted and has no duplicates
        for(i=0;i<n-1;i++){
                if(arr[i] == arr[i+1])
                        k++;
                if(arr[i] > arr[i+1])
                        l++;
        }
        if(k!=0){
                printf("No duplicates allowed");
                return 0;
        }
        if(l!=0){
                printf("Array must be sorted");
                return 0;
        }
        //Find element index or print where it should be inserted
        for(i=0;i<n;i++){
                if(arr[i] == t){
                        printf("%d",i);
                        return 0;
                }
                if(arr[i] > t){
                        printf("%d",i);
                        return 0;
                }
                else{
                        printf("%d",n+1);
                        return 0;
                }
        }
}

2 个答案:

答案 0 :(得分:1)

我认为您的问题是您在最后一次循环后始终打印并返回。我不能确定,因为我不知道你给出了哪个输入,你得到的输出和预期的输出

尝试更改

    //Find element index or print where it should be inserted
    for(i=0;i<n;i++){
            if(arr[i] == t){
                    printf("%d",i);
                    return 0;
            }
            if(arr[i] > t){
                    printf("%d",i);
                    return 0;
            }
            else{
                    printf("%d",n+1);
                    return 0;
            }
    }

    //Find element index or print where it should be inserted
    for(i=0;i<n;i++){
            if(arr[i] == t){
                    printf("%d",i);
                    return 0;
            }
            if(arr[i] > t){
                    printf("%d",i);
                    return 0;
            }
    }
    printf("%d",n+1);
    return 0;

这样做的原因是,如果数组中的第一个元素小于t,则无论其他元素如何,都将打印n + 1。 此外,您可能希望在其他所有内容之后打印新的行字符,因此将\n添加到第一个参数的末尾。

答案 1 :(得分:0)

上一循环的else语句中的逻辑问题。

纠正代码 -

#include<stdio.h>
int main(){
    int n,t,i,k=0,l=0;
    int arr[50];
    scanf("%d",&n);
    for(i=0;i<n;i++){
            scanf("%d",&arr[i]);
    }
    scanf("%d",&t);
    // Array size should be less than 50
    if(n>50||n<=0){
            printf("Array size exceeded");
            return 0;
    }
    //Check array is sorted and has no duplicates
    for(i=0;i<n-1;i++){
            if(arr[i] == arr[i+1])
                    k++;
            if(arr[i] > arr[i+1])
                    l++;
    }
    if(k!=0){
            printf("No duplicates allowed");
            return 0;
    }
    if(l!=0){
            printf("Array must be sorted");
            return 0;
    }
    //Find element index or print where it should be inserted
    for(i=0;i<n;i++){
            if(arr[i] == t){
                    printf("%d",i);
                    return 0;
            }
            if(arr[i] > t){
                    printf("%d",i);
                    return 0;
            }
            else{
                    printf("%d",i+1);
                    return 0;
            }
    }
}

建议 - 对已排序的数组使用二进制搜索。