0

以下のように配列を初期化する簡単なソートプログラムを作成しました。

int a[]={9,4,7,8,5,2,6,1,0,3};

しかし、私のソート関数は配列 a[0] を a[7] にソートし、0 を '\0' のように扱って停止します。他の場所に 0 を配置すると、0 までソートされ、残りの配列は無視されます。C は 0 と '\0' をここで同じように扱っていますか?

私のバブルソートプログラムは以下の通りです。

#include<stdio.h>
#include<conio.h>

int main()
{
int a[]={9,4,7,8,5,2,6,1,0,3};

void bubble_sort(int *a);
void print(int *a);

bubble_sort(a);

print(a);

getch();

return 0;
}

void bubble_sort(int *a)
{
int i=0,j,t,n;
for(i=0;a[i]!='\0';i++)
{
    n=0;
    for(j=1;a[j]!='\0';j++)
    {
        if(a[j-1]>a[j])
        {
            t=a[j-1];
            a[j-1]=a[j];
            a[j]=t;
            n++;
        }
    }
    if(n==0)
    {
         break;
    }
}
}

void print(int a[])
{
int i=0;

for(i=0;a[i]!='\0';i++)
{
    printf("%d ",a[i]);
}

printf("\n");
}
4

4 に答える 4

6

'\0'0定義によるものです。配列の長さをソート関数に渡すか、ターミネータとして別の整数値を選択し、その値を他の目的で使用しないようにする必要があります。

于 2013-04-01T04:02:44.257 に答える
4

文字'\0'は正確に 0 です。配列の長さをソート アルゴリズムに渡し、それを使用します。

于 2013-04-01T04:03:34.653 に答える
2

C は 0 と '\0' をここで同じように扱っていますか?

はい。どちらもゼロだからです。他の人が述べたように、または配列の長さを関数に渡すか、配列に含まれないようにする必要がある配列に別の区切り文字を選択して使用します。

編集:@Jim Balter、説明してくれてありがとう。

于 2013-04-01T04:06:43.080 に答える