c++ 交换数组内容 - 选择排序

问题描述 投票:0回答:1

我是 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)

有人对为什么这种情况不断发生有任何意见吗?

c++ sorting dynamic-memory-allocation selection-sort function-declaration
1个回答
1
投票

您动态分配了

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] );
}
© www.soinside.com 2019 - 2024. All rights reserved.