选择排序在 C 中设置错误的值
Selection Sort setting wrong values in C
新程序员来了!
我正在实施选择排序,使用最大变量而不是通常的最小值,但我仍然想从最低到最高排序。
下面的代码对列表进行了完美排序,除了第一个值是一个非常大的负数...
关于我可以修复以使其正确排序的任何提示?
void selection(int Array[], int size) {
int i, j, max, temp;
for (i = 0; i < size-1; i++) {
max = i;
for (j = i+1; j <= size; j++) {
if ( Array[j] < Array[max] )
max = j;
}
temp = Array[max];
Array[max] = Array[i];
Array[i] = temp;
}
}
for(j = i+1; j<=size; j++)
这一行是你的问题。您正在访问数组末尾的一个,这将是未定义的行为,并且通常会给您带来奇怪的值。将条件更改为 j < size
.
在上面的代码行中,我可以看到您正在为数组使用基于 0 的索引,因此当您引用 Array[size] 或 Array[size+1] 时,这会抛出垃圾值,
您应该将内部循环替换为
for (j = i+1; j < size; j++)
新程序员来了! 我正在实施选择排序,使用最大变量而不是通常的最小值,但我仍然想从最低到最高排序。 下面的代码对列表进行了完美排序,除了第一个值是一个非常大的负数... 关于我可以修复以使其正确排序的任何提示?
void selection(int Array[], int size) {
int i, j, max, temp;
for (i = 0; i < size-1; i++) {
max = i;
for (j = i+1; j <= size; j++) {
if ( Array[j] < Array[max] )
max = j;
}
temp = Array[max];
Array[max] = Array[i];
Array[i] = temp;
}
}
for(j = i+1; j<=size; j++)
这一行是你的问题。您正在访问数组末尾的一个,这将是未定义的行为,并且通常会给您带来奇怪的值。将条件更改为 j < size
.
在上面的代码行中,我可以看到您正在为数组使用基于 0 的索引,因此当您引用 Array[size] 或 Array[size+1] 时,这会抛出垃圾值, 您应该将内部循环替换为
for (j = i+1; j < size; j++)