我是 C++ 新手。我试图按以下方式编写一个用于选择排序的函数。
void selection_sort(int* m[], int array_size) {
for (int i = 0; i < array_size; i++)
int min_ind = i;
for (int j = i+1; j < array_size; j++){
if (m[min_ind] > m[j]){
min_ind = j;
}
}
int temp = *m[i];
*m[i] = *m[min_ind];
*m[min_ind] = temp;
}
}
在 main 中,数组定义为:
int *sel_nums = new int[n];
我在 main 中调用选择排序:
selection_sort( &sel_nums, x );
我不断收到错误消息:
Segmentation fault (core dumped)
有人对为什么这种情况不断发生有任何意见吗?
您动态分配了
int
类型的对象数组。
int *sel_nums = new int[n];
您将将此数组传递给函数
selection_sort
。因此函数声明将类似于 ;east
void selection_sort( int m[], int array_size );
编译器隐式调整数组类型的参数为指向数组元素类型的指针。即上面的声明相当于
void selection_sort( int *m, int array_size );
所以可以这样调用该函数
selection_sort( sel_nums, n );
要在函数内交换数组的两个元素,您可以编写
if ( min_ind != i )
{
int temp = m[i];
m[i] = m[min_ind];
m[min_ind] = temp;
}
或者你可以使用标准 C++ 函数
std::swap
就像
#include <utility>
//...
if ( min_ind != i )
{
std::swap( m[i], m[min_ind] );
}