Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/62.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
获取quicksort.exe的原因已停止工作,出现错误255<;0xff>;在运行我的快速排序算法代码时,我使用的是代码块_C_Data Structures_Quicksort - Fatal编程技术网

获取quicksort.exe的原因已停止工作,出现错误255<;0xff>;在运行我的快速排序算法代码时,我使用的是代码块

获取quicksort.exe的原因已停止工作,出现错误255<;0xff>;在运行我的快速排序算法代码时,我使用的是代码块,c,data-structures,quicksort,C,Data Structures,Quicksort,我正在代码块上运行此代码,并在quicksort.exe停止工作时出错。主要功能工作正常。原因是什么?我如何解决这个问题 代码如下: #包括 #包括 无效快速排序(int*,int,int); 整数部分(整数*,整数,整数); int main() { int i,n,a[100]; printf(“输入数组的长度\n”); scanf(“%d”和“&n”); printf(“输入数组元素\n”); 对于(i=0;i您可以通过此修改您的代码(有两个代码最接近您的想法,我添加注释): #包括 #包

我正在代码块上运行此代码,并在
quicksort.exe
停止工作时出错。主要功能工作正常。原因是什么?我如何解决这个问题

代码如下:
#包括
#包括
无效快速排序(int*,int,int);
整数部分(整数*,整数,整数);
int main()
{
int i,n,a[100];
printf(“输入数组的长度\n”);
scanf(“%d”和“&n”);
printf(“输入数组元素\n”);

对于(i=0;i您可以通过此修改您的代码(有两个代码最接近您的想法,我添加注释):

#包括
#包括
无效快速排序(int*,int,int);
整数部分(整数*,整数,整数);
int main()
{
int i,n,a[100];
printf(“输入数组的长度\n”);
scanf(“%d”和“&n”);
printf(“输入数组元素\n”);

对于(i=0;为什么有C++的TAG?你有一个崩溃。你使用一个调试器来定位你的代码中发生的位置。当在调试器中,在捕捉崩溃并找到代码中发生的位置时,你可以检查所涉及的变量和它们的值,以确保它们看起来是有效的。如果你仍然不能解决它,那么将你的问题编辑到GIV。请告诉我们这些详细信息(位置和变量值)。
t2=x[pos];
x[pos]
可能超出范围。您的代码占用了太多内存。我尝试运行了几次,但都没有成功,这使我的机器(Ubuntu 16.04)冻结。我用gdb对其进行了调试,在启动part()时出现了分段错误函数位于第36行。回溯提供了大量日志。BT充满了这一行:
#26271 0x0000000000407A2在快速排序中(a=0x7fffffffdbc0,lb=0,ub=0)在快速排序中。c:30p=1#26272 0x0000000000407A2在快速排序中(a=0x7fffffffdbc0,lb=0,ub=0)在quick.c:30中,我怀疑如果下界等于上界,你就会陷入无限递归。快速代码检查表明情况就是这样。
#include <stdio.h>
#include <stdlib.h>

void quicksort(int *,int,int);
int part(int *,int,int);

int main()
{
    int i,n, a[100];
    printf("Enter the length of array\n");
    scanf("%d",&n);
    printf("Enter array elements\n");

    for(i=0;i<n;i++)
        scanf("%d",&a[i]);

    quicksort(a,0,n-1);
    printf("\nSorted array:\n");

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

    return 0;
}


void quicksort(int *a,int lb,int ub)
{
    int p;

    if(lb>ub)
        return;

    p= part(a,lb,ub);
    quicksort(a,lb,p-1);
    quicksort(a,p+1,ub);
    return;
 }

int part(int *x, int l, int u)
{

    int piv,i,t,t2,pos=l;
    piv=x[u];

    for(i=l;i<=u;i++)
    {
        if(x[i]<=piv)
        {
            t=x[i];
            x[i]=x[pos];
            x[pos]=t;
            pos++;
        }

    }
    t2=x[pos];
    x[pos]=x[u];
    x[u]=t2;
    return pos;
}
#include <stdio.h>
#include <stdlib.h>

void quicksort(int *,int,int);
int part(int *,int,int);

int main()
{
    int i,n, a[100];
    printf("Enter the length of array\n");
    scanf("%d",&n);
    printf("Enter array elements\n");

    for(i=0;i<n;i++)
        scanf("%d",&a[i]);

    quicksort(a,0,n-1);
    printf("\nSorted array:\n");

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

    return 0;
}


void quicksort(int *a,int lb,int ub)
{
    int p;

    if(lb>ub)
        return;

    p= part(a,lb,ub);
    quicksort(a,lb,p-1);
    quicksort(a,p+1,ub);
    return;
}

int part(int *x, int l, int u)
{

    int piv,i,t,pos=l-1;  //not pos = l 
    piv=x[u];

    for(i=l;i<=u;i++) // You can write:for(i = l; i < u; i++)
    {
        if(x[i]<=piv)
        {
            pos++;    //pos should add 1 before swap
            t=x[i];
            x[i]=x[pos];
            x[pos]=t;
        }

    }
    //If you write for(i = l; i < u; i++), use the following three lines of code
    //t2=x[pos+1]; 
    //x[pos+1]=x[u];
    //x[u]=t2;
    return pos;
}