c ++交换数组的内容 - 选择排序
c++ swapping content of array - Selection Sort
我是 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 like
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] );
}
我是 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 like
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] );
}