宿題:ループを使用せずに、逆順選択ソート関数を書く必要があります。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;
}
私はこの問題を確認できません。値の代わりに最大の要素のインデックスを返すだけで問題は解決しないのでしょうか? – Prune
"max(arr、0、n - = 1)'に最大値を返すのではなく、 "これを見つける方法を知っていました。"、そのインデックスを返してください! –
@KyleKhalaf残念ながら、max関数とswap関数をそのまま使用する必要があります。変更は許可されていません。 –