[英]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.