簡體   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