为什么这段代码在选择排序中给出分段错误,请解释
why is this code giving segmention error in selection sort ,please explain
为什么会出现分段错误,请大神解释一下,我是竞争性编程的新手,我自己找不到错误
这里是选择排序的代码:
#include<stdio.h>
void swap(int *xp ,int *yp)
{
int temp = *xp;
*xp = *yp;
*yp = temp;
}
void SelectionSort(int* A , int n)
{
int i ,j ,imin;
for(i =0 ; i<n-1;i++)
{
imin =i;
for (j =i+1;i<n;j++)
{
if (A[j] < A[imin])
imin =j;
}
swap(&A[imin],&A[i]);
}
}
int main()
{
int A[]= {1,2,5,8,44,5,7,9,6};
int n = sizeof(A)/sizeof(A[0]);
SelectionSort(A,n);
printf("start printing:");
for(int i = 0;i<6 ;i++)
{
printf(" output is %d ",A[i]);
}
}
您在 SelectionSort
中的内部 for
循环有问题:
for (j =i+1;i<n;j++)
表示您永远不会测试 j
。尝试:
for (j = i+1; j < n; j++)
in for loop condition matching j =i+1;i<n;j++
in this expression at place of i
use j
then loop will 运行 otherwise not.
为什么会出现分段错误,请大神解释一下,我是竞争性编程的新手,我自己找不到错误
这里是选择排序的代码:
#include<stdio.h>
void swap(int *xp ,int *yp)
{
int temp = *xp;
*xp = *yp;
*yp = temp;
}
void SelectionSort(int* A , int n)
{
int i ,j ,imin;
for(i =0 ; i<n-1;i++)
{
imin =i;
for (j =i+1;i<n;j++)
{
if (A[j] < A[imin])
imin =j;
}
swap(&A[imin],&A[i]);
}
}
int main()
{
int A[]= {1,2,5,8,44,5,7,9,6};
int n = sizeof(A)/sizeof(A[0]);
SelectionSort(A,n);
printf("start printing:");
for(int i = 0;i<6 ;i++)
{
printf(" output is %d ",A[i]);
}
}
您在 SelectionSort
中的内部 for
循环有问题:
for (j =i+1;i<n;j++)
表示您永远不会测试 j
。尝试:
for (j = i+1; j < n; j++)
in for loop condition matching j =i+1;i<n;j++
in this expression at place of i
use j
then loop will 运行 otherwise not.