@@ -49,60 +49,38 @@ void IS_ARR_PARTITIONED(std::vector<T> arr,
4949 std::string type,
5050 bool descending = false )
5151{
52- if (!descending) {
53- auto cmp_eq = compare<T, std::equal_to<T>>();
54- auto cmp_less = compare<T, std::less<T>>();
55-
56- auto cmp_leq = compare<T, std::less_equal<T>>();
57- auto cmp_geq = compare<T, std::greater_equal<T>>();
52+ std::function<bool (T, T)> cmp_eq, cmp_less, cmp_leq, cmp_geq;
53+ cmp_eq = compare<T, std::equal_to<T>>();
5854
59- // 1) arr[k] == sorted[k]; use memcmp to handle nan
60- if (!cmp_eq (arr[k], true_kth)) {
61- REPORT_FAIL (" kth element is incorrect" , arr.size (), type, k);
62- }
63- // ( 2) Elements to the left of k should be atmost arr[k]
64- if (k >= 1 ) {
65- T max_left = *std::max_element (
66- arr.begin (), arr.begin () + k - 1 , cmp_less);
67- if (!cmp_geq (arr[k], max_left)) {
68- REPORT_FAIL (" incorrect left partition" , arr.size (), type, k);
69- }
70- }
71- // 3) Elements to the right of k should be atleast arr[k]
72- if (k != (size_t )(arr.size () - 1 )) {
73- T min_right = *std::min_element (
74- arr.begin () + k + 1 , arr.end (), cmp_less);
75- if (!cmp_leq (arr[k], min_right)) {
76- REPORT_FAIL (" incorrect right partition" , arr.size (), type, k);
77- }
78- }
55+ if (!descending) {
56+ cmp_less = compare<T, std::less<T>>();
57+ cmp_leq = compare<T, std::less_equal<T>>();
58+ cmp_geq = compare<T, std::greater_equal<T>>();
7959 }
8060 else {
81- auto cmp_eq = compare<T, std::equal_to<T>>();
82- auto cmp_less = compare<T, std::greater<T>>();
83-
84- auto cmp_leq = compare<T, std::greater_equal<T>>();
85- auto cmp_geq = compare<T, std::less_equal<T>>();
61+ cmp_less = compare<T, std::greater<T>>();
62+ cmp_leq = compare<T, std::greater_equal<T>>();
63+ cmp_geq = compare<T, std::less_equal<T>>();
64+ }
8665
87- // 1) arr[k] == sorted[k]; use memcmp to handle nan
88- if (!cmp_eq (arr[k], true_kth)) {
89- REPORT_FAIL (" kth element is incorrect" , arr.size (), type, k);
90- }
91- // ( 2) Elements to the left of k should be atleast arr[k]
92- if (k >= 1 ) {
93- T max_left = *std::max_element (
94- arr.begin (), arr.begin () + k - 1 , cmp_less);
95- if (!cmp_geq (arr[k], max_left)) {
96- REPORT_FAIL (" incorrect left partition" , arr.size (), type, k);
97- }
66+ // 1) arr[k] == sorted[k]; use memcmp to handle nan
67+ if (!cmp_eq (arr[k], true_kth)) {
68+ REPORT_FAIL (" kth element is incorrect" , arr.size (), type, k);
69+ }
70+ // ( 2) Elements to the left of k should be atmost arr[k]
71+ if (k >= 1 ) {
72+ T max_left = *std::max_element (
73+ arr.begin (), arr.begin () + k - 1 , cmp_less);
74+ if (!cmp_geq (arr[k], max_left)) {
75+ REPORT_FAIL (" incorrect left partition" , arr.size (), type, k);
9876 }
99- // 3) Elements to the right of k should be atmost arr[k]
100- if (k != ( size_t )(arr. size () - 1 )) {
101- T min_right = * std::min_element (
102- arr. begin () + k + 1 , arr. end (), cmp_less);
103- if (! cmp_leq ( arr[k], min_right)) {
104- REPORT_FAIL ( " incorrect right partition " , arr. size (), type, k);
105- }
77+ }
78+ // 3) Elements to the right of k should be atleast arr[k]
79+ if (k != ( size_t )(arr. size () - 1 )) {
80+ T min_right = * std::min_element (
81+ arr. begin () + k + 1 , arr. end (), cmp_less);
82+ if (! cmp_leq (arr[k], min_right)) {
83+ REPORT_FAIL ( " incorrect right partition " , arr. size (), type, k);
10684 }
10785 }
10886}
0 commit comments