簡體   English   中英

輸出顯示不同

[英]Output is showing different

#include<stdio.h>
int main()
{   
int a[6]={2,5,4,6,1,3};
int j,key,i,k;   
for(j=1;j<6;++j)
{
    key=a[j];
    i=j-1;
    while((i>=0)&&(a[i]>key))
    {
        a[i+i]=a[i];
        i=i-1;
    }
    a[i+1]=key;
}

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

當我計算自己時,我得到 1,2,3,4,5,6 但輸出是 2,4,5,6,1,3。

我很努力地嘗試,但找不到這有什么問題。

錯誤在 a[i+i]=a[i] 行。它應該是 a[i+1]。當你有 i+i(and i>=3) 時,它會嘗試訪問你不使用的索引不知道發生了什么,因為它不是a的空間。

你的程序有錯別字。

而不是

a[i+i]=a[i];

會有

a[i+1]=a[i];

考慮到根據 C 標准,沒有參數的函數 main 應聲明為

int main( void )

在整個程序中使用“原始數字”也是一個壞主意。

最好將排序放在一個單獨的函數中。

相應的程序看起來像

#include <stdio.h>

void insertion_sort(int *a, size_t n)
{
    for (size_t i = 1; i < n; i++)
    {
        size_t j = i;
        int value = a[i];

        for (; j != 0 && value < a[j - 1]; --j)
        {
            a[j] = a[j - 1];
        }

        if (j != i) a[j] = value;
    }
}

int main( void )
{
    int a[] = { 2, 5, 4, 6, 1, 3 };
    const size_t N = sizeof(a) / sizeof(*a);

    for (size_t i = 0; i < N; i++)
    {
        printf("%2d ", a[i]);
    }
    putchar('\n');

    insertion_sort(a, N);

    for (size_t i = 0; i < N; i++)
    {
        printf("%2d ", a[i]);
    }
    putchar('\n');

    return 0;
}

它的輸出是

2  5  4  6  1  3
1  2  3  4  5  6

對於大數組,最好使用二分搜索而不是順序比較。

這里你的數組大小是 6,因為你聲明了 A[6]。 現在考慮 i=4 的情況,所以在這一行a[i+i]=a[i]您試圖訪問a[4+4]=a[4]

您無法訪問索引a[8] 只需將a[i+i]更改為a[i+1]解決問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM