繁体   English   中英

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

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] );
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM