Ну, это зависит от того, ЧТО у вас под рукой.
Помимо обычных тестов, где вы предоставляете входы и выходы вручную для тестирования угловых случаев и нескольких других входов (см. JUnit или аналогичную структуру на самом делелюбым популярным языком), вы также можете написать неэффективную, но простую версию вашего алгоритма (или, если быть точным, все, что дает те же результаты, обычно не совсем тот же алгоритм) и протестировать эту версию, либо для всех возможных входных данных, либо, если этоневозможно использовать Fuzztester и некоторую рандомизацию.
Одним примером для последующего будет тестирование сложного алгоритма сортировки (скажем, heapsort) против SelectionSort.Это также хорошо работает, если вы оптимизируете код и уже имеете под рукой проверенную и протестированную версию (что само по себе является рекурсивной проблемой).
В вашем конкретном случае вы можете просто сравнить свою версию с простым двоичным файломпоиск - который наверняка уже есть в стандартной библиотеке - создание массивов случайного размера со случайным вводом также не должно быть проблемой.