Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 计数排序我的输入是1,4,3,1,但输出是垃圾值,1,1,3输入不正确 #包括 #包括 main() { int A[200],p=0,r=0,s=0,i,n,temp=0,B[200]; printf(“输入计数排序的元素编号:”); scanf(“%d”和“&n”); 对于(i=0;i_C++_C_Algorithm_Sorting_Counting - Fatal编程技术网

C++ 计数排序我的输入是1,4,3,1,但输出是垃圾值,1,1,3输入不正确 #包括 #包括 main() { int A[200],p=0,r=0,s=0,i,n,temp=0,B[200]; printf(“输入计数排序的元素编号:”); scanf(“%d”和“&n”); 对于(i=0;i

C++ 计数排序我的输入是1,4,3,1,但输出是垃圾值,1,1,3输入不正确 #包括 #包括 main() { int A[200],p=0,r=0,s=0,i,n,temp=0,B[200]; printf(“输入计数排序的元素编号:”); scanf(“%d”和“&n”); 对于(i=0;i,c++,c,algorithm,sorting,counting,C++,C,Algorithm,Sorting,Counting,好的,铅笔和纸张时间。您的输入是: #include<stdio.h> #include<stdlib.h> main() { int A[200],p=0,r=0,s=0,i,n,temp=0,B[200]; printf("Enter no. of Element for counting sort :"); scanf("%d",&n); for(i=0;i<n;i++) s

好的,铅笔和纸张时间。您的输入是:

#include<stdio.h>            
#include<stdlib.h>

main()
{
    int A[200],p=0,r=0,s=0,i,n,temp=0,B[200];  
    printf("Enter no. of Element for counting sort :");
    scanf("%d",&n);
    for(i=0;i<n;i++)
        scanf("%d",&A[i]);

    printf("\nBefore Sorting: ");

    for(i=0;i<n;i++)
        printf("%d ",A[i]);

    printf("\n");

    for(i=0;i<n;i++)
    {
        if(A[i]>temp)
            temp=A[i];
    }

    printf("\nLargest %d \n",temp);

    counting_sort(A,B,n,temp);

    for(i=0;i<n;i++)
        printf("%d ",B[i]);

    printf("\n");
}


counting_sort(int A[],int B[],int n,int temp)
{
    int i=0,C[200],j;
    for(i=0;i<=temp;i++)
        C[i]=0;

    for(i=0;i<n;i++)
        C[A[i]]=C[A[i]]+1;

    for(i=1;i<=temp;i++)
        C[i]=C[i]+C[i-1];

    for(i=n-1;i>=0;i--)
    {
        B[C[A[i]]]=A[i];
        C[A[i]]=C[A[i]]-1;
    }
}
您的计数已正确确定:

A = {1, 4, 3, 1}
然后将其转换为累计计数:

C' = {0, 2, 0, 1, 1}
这个步骤也是正确的。这个数组代表什么?对于
a
中的每个元素
a
C[a]
是排序数组中所有
a
s之后的元素的索引,
B

C = {0, 2, 2, 3, 4}
否则,当处理元素4时,最终将写入索引4,但该索引超出了数组的限制。(您看到的数字只是
B
中未初始化元素的垃圾)

顺便说一句,倒计时时先减在C中是很常见的事情,这是由于数组的上界是互斥的

for (i = n - 1; i >= 0; i--) {
    C[A[i]] = C[A[i]] - 1;
    B[C[A[i]]] = A[i];
}

更新部分丢失,因为减量发生在输入循环体之前。您可以在初始化过程中不减去减量。堆栈溢出不是调试工具。请使用调试器…无论其用途如何,
C[a[i]=C[a[i]]-1、 
正在递减一个值,该值稍后将用作同一循环中的数组索引。标记为“Off-topic”调试器有时也是这样,但在这种情况下,我同意@ SpopiRoaAcOv.OP会从启动IDE的调试器和了解自己的过程中学到更多东西。C!= C++。通常只对正在编译/编写的语言进行标记。
for (i = n - 1; i >= 0; i--) {
    C[A[i]] = C[A[i]] - 1;
    B[C[A[i]]] = A[i];
}
for (i = n; i-- > 0; ) {
    C[A[i]] = C[A[i]] - 1;
    B[C[A[i]]] = A[i];
}