这个程序使用快速排序对数字进行排序,然后是交替放置负数和正数的代码。
#include<stdio.h>
#include<stdlib.h>
void swap(int *arr,int i,int j)
{
int temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
int partition(int *arr,int left,int right)
{
int temp=0;
int i=left;
int j=right;
while(i<=j)
{
while(i<=right && arr[i]<=temp)
i++;
while(j>=left && arr[j]>=temp)
j--;
if(i<j)
swap(arr,i,j);
}
return j;
}
void quick_sort(int *arr,int left,int right)
{
if(left<right)
{
int pivot=partition(arr,left,right);
quick_sort(arr,left,pivot-1);
quick_sort(arr,pivot+1,right);
}
return ;
}
void nega(int *arr,int left,int right)
{
int i;
quick_sort(arr,left,right);
for(i=0;i<right+1;i++)
{
if(arr[i]>=0)
break;
}
int j=i;
int k;
for(i=1,k=j;i<j && k<=right;i+=2,k++)
{
int temp=arr[i];
arr[i]=arr[k];
arr[k]=temp;
}
}
int main()
{
int i,n;
int arr[15];
printf("enter the n:");
scanf("%d",&n);
for(i=0;i<n;i++)
{
printf("enter the element");
scanf("%d",&arr[i]);
}
printf("debug");
nega(arr,0,n-1);
for(i=0;i<n;i++)
printf("%d",arr[i]);
return 0;
}
这里的代码要求用户输入 n 的值,并将 n 个元素放入数组中。 如果 n 的值为 1(即,对于一个元素)它工作正常。 如果 n > 1 的值(对于超过 1 个元素)。它显示段错误。可能在它访问无法访问的位置的函数中的某处。
但是,我不明白为什么它不是在输入代码后立即执行 printf("debug");
而是在执行 printf( "debug");
而且在 printf("debug");
之前我没有找到任何导致段错误的原因。
谁能指出我的问题所在。谢谢。
最佳答案
for(i=0;i<right+1;i++)
{
if(arr[i]>=0)
break;
}
这部分看起来很可疑。权利永远是最后一个要素吗?
关于c - 尝试运行程序时出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19873885/