バイナリ検索を使用して、配列の順序を確認したいですバイナリ検索アルゴリズムを使用しています(つまり、各再帰呼び出しの半分で配列を分割します)。どうやってやるの? ありがとうございます。私はそれが昇順でいた場合にn個の再帰関数はサイズの配列を確認するために、私は再帰関数を書いた
0
A
答えて
1
bool sortedAscending(const int* x, int n) {
if (n <= 1) return true;
int m = n/2;
return x[m-1] <= x[m] &&
sortedAscending(x, m) &&
sortedAscending(x + m, n - m);
}
+0
はこれがO(n)の時間複雑度ですか? –
+0
はい。あなたは何か違うことを期待しましたか? –
+0
しかし、私たちは毎回半分に分かれていませんか?それはO(log2(n))ではいけませんか? –
0
候補配列の先頭と最後のポインタを使用することをお勧めします。これはイテレーターのスタイルと一貫しています。
#include <iostream>
bool sortedAscending(const int* start, const int* end)
{
if(start == end) return true;
if(start + 1 == end) return true;
auto halfDiff = (end - start)/2;
return *(start + halfDiff - 1) <= *(start + halfDiff) && sortedAscending(start, start + halfDiff) && sortedAscending(start + halfDiff, end);
}
int main()
{
int array1[] = {0,1,2,3,4,5,6,7};
int array2[] = {0,1,3,2,4,5,6,7};
int array3[] = {0};
int* array4 = nullptr;
std::cout << "Array1: " << sortedAscending(std::begin(array1), std::end(array1)) << std::endl;
std::cout << "Array2: " << sortedAscending(std::begin(array2), std::end(array2)) << std::endl;
std::cout << "Array3: " << sortedAscending(std::begin(array3), std::end(array3)) << std::endl;
std::cout << "Array4: " << sortedAscending(array4, array4) << std::endl;
return 0;
}
関連する問題
- 1. アルゴリズムArrayListのための再帰関数のとArrayListのは、正確な配列
- 2. 再帰関数のベースcaseとステートメントを持たない再帰
- 3. Kotlin:相互再帰関数のための末尾再帰
- 4. 私はこの再帰関数
- 5. 再帰関数が終了したかどうかを確認するには?
- 6. 再帰関数は
- 7. 再帰テンプレート - 定数nサイズの配列 - > n-1サイズのインプレース?
- 8. N次元ベクターのための再帰的バリアリテンプレート関数
- 9. (C++)再帰関数は - これは私がちょうど再帰関数で始まるよ
- 10. 再帰関数を数えるには?
- 11. テール再帰(@tailrec)再帰関数対非再帰関数スカラースタックオーバーフローエラー?
- 12. nが偶数の場合に最適化されたx^nの再帰メソッド
- 13. 要素を昇順で追加する再帰関数を書く
- 14. 再帰関数は、私は、単純な再帰関数を作って、それが動作するように期待(しかし、それはしません)
- 15. Pythonのネストされた再帰関数
- 16. haskellの再帰関数の定義内の再帰的にビルドされたリストに関数を適用する
- 17. 再帰関数の合計
- 18. 関数または値を返す:再帰的なpython関数
- 19. 正弦関数の再帰計算は役に立たない
- 20. 再帰関数 - 2つの関数または最後のオプションパラメータ
- 21. 配列/文字列内のゼロをクリアするための再帰関数
- 22. 再帰:再帰関数から値-1を返すには
- 23. 私は再帰を実践するために、再帰的階乗関数を記述しようとすると、この思い付いたとき
- 24. ツリーメニューの配列の再帰関数
- 25. "*"を除いた指数を計算するための再帰関数
- 26. コール私は再帰的なプロセスが含まれていCARE_SAVという関数を定義した関数MATLAB
- 27. 最小数をチェックするための再帰関数
- 28. 私はこの再帰的な定義された関数持た反復
- 29. 再帰関数内の配列
- 30. 配列のPHP再帰関数
再帰関数は、チェック対象となる範囲の先頭と1番目にイテレータのペアを取る必要があります。その後、範囲を半分にするだけで再帰的に簡単に呼び出すことができます。 – Corristo
2つの問題があります。 (1) 'if(n <= 1)がtrueを返す; - 1つの要素の配列が常にソートされます。次のコードは、少なくとも2つの要素があることを前提としています。 (2) 'return sortedAscending(x、n - 1);' - あなたは 'return'ステートメントがありません。また、最後の2行は 'return x [n - 1]> = x [n - 2] && sortedAscending(x、n - 1);' –
に簡略化することができます。 –