2017-06-19 6 views
1

宿題:ループを使用せずに、逆順選択ソート関数を書く必要があります。swap関数とfind_Max関数パラメーター。再帰的な後方選択ソート関数からmaxとswap関数を呼び出す

swapを駆動するには、maxという値のインデックスが必要です。私はそれをどうやって得るのか分かりません。残念ながら、私はswapでもMaxでもback_rec_sortでもパラメータを変更することはできません。最初の機能は問題です。他の2人は呼ばなければなりません。また、後方への並べ替えは、最大の値を見つけ出し、n-1の位置にスワップし、次に0のインデックスに向かって処理します。オリジナルのポストで述べたように、追加の関数を呼び出す制限するものではありませんでした

//Updated version calling linear search from back_rec_sort as hw question 
does not restrict that. 

void rec_ssort(int arr[], int n) 
{ 
    int last = n -1; 

    if (last >= 0) 
    { 
     int Max = max(arr, 0, last); 
     //int index=binarySearch(arr, 0, last, Max); 
     int index = search(arr, last, Max); 
     swap(arr, index, last); 
     rec_ssort(arr, n - 1); 
    } 
    else 
     return; 
} 

// Linearly search x in arr[]. If x is present then return its 
// location, otherwise return -1 
int search(int arr[], int n, int x) 
{ 
    int i; 
    for (i = 0; i < n; i++) 
    { 
     if (arr[i] == x) 
      return i; 
    } 
    return -1; 
} 

int max(int arr[], int start, int end) 
{ 
    //Base case when there is only 1 element left 
    if (start == end) 
    { 
     return arr[start]; 
    } 

    //Compute middle element position 
    int m = (start + end)/2; 

    //Calling the same function with reduced size 
    int left_max = max(arr, start, m); 
    int right_max = max(arr, m + 1, end); 

    //Combining solutions 
    if (left_max > right_max) 
    { 
     return left_max; 
    } 
    else 
    { 
     return right_max; 
    } 
} 

void swap(int arr[], int i, int j) 
{ 
    int temp; 
    temp =arr[i]; 
    arr[i] = arr[j]; 
    arr[j] = temp; 
} 
+0

私はこの問題を確認できません。値の代わりに最大の要素のインデックスを返すだけで問題は解決しないのでしょうか? – Prune

+0

"max(arr、0、n - = 1)'に最大値を返すのではなく、 "これを見つける方法を知っていました。"、そのインデックスを返してください! –

+0

@KyleKhalaf残念ながら、max関数とswap関数をそのまま使用する必要があります。変更は許可されていません。 –

答えて

0

...

(1)、配列内のその値のインデックスを返し、配列や値をとる線形検索機能を記述します。

int search(int arr[], int n, int target) 
{ 
    int i; 
    for (i = 0; i < n; i++) 
    { 
     if (arr[i] == target) 
      return i; 
    } 
    return -1; // if not found 
} 

(2)境界のうち配列アクセス-1失敗戻り結果を - これは、元のコードと、検索機能との間の調整の問題です。その行を削除すると、代わりにNULLが返されます。

0

宿題の要件は、私は、プログラムに線形検索機能を追加しましたback_rec_sort内から呼び出されます。しかし、私は配列の16進数のガーベリーをコメントにリンクされているので、私はプルーンが提案したようにデバッグし、 "return -1"を検索関数から削除していました。私は、テスト、デバッグ、アサーションを書くコーナーケースを決定する方法についてもっと学びたいと思っています。私たちは疑問をアーカイブすることができますこれを書く

関連する問題