aboutsummaryrefslogtreecommitdiff
path: root/tests/functional/median.sy
diff options
context:
space:
mode:
authorRichard Qin <richard.qin.001@gmail.com>2026-09-15 08:16:43 +0800
committerRichard Qin <richard.qin.001@gmail.com>2026-09-15 08:16:43 +0800
commit4022e5c95210631e4aceb08eaf9d9071aa5aefc4 (patch)
treea5922559836e45fb3459a3d070367912e1035b1a /tests/functional/median.sy
downloadrcc-master.tar.gz
rcc-master.tar.xz
Set up a git repoHEADmaster
Diffstat (limited to 'tests/functional/median.sy')
-rw-r--r--tests/functional/median.sy54
1 files changed, 54 insertions, 0 deletions
diff --git a/tests/functional/median.sy b/tests/functional/median.sy
new file mode 100644
index 0000000..6ecd589
--- /dev/null
+++ b/tests/functional/median.sy
@@ -0,0 +1,54 @@
+int median(int arr[], int N, int i, int j) {
+ if (i == N / 2 || i == (N + 1) / 2) {
+ return i;
+ }
+
+ if (j == N / 2 || j == (N + 1) / 2) {
+ return j;
+ }
+
+ int middle = i;
+ int temp = arr[i];
+
+ int k = i + 1;
+
+ while (k <= j) {
+ if (arr[k] < temp) {
+ if (k == middle + 1) {
+ arr[middle] = arr[k];
+ arr[middle + 1] = temp;
+ middle = middle + 1;
+ k = k + 1;
+ continue;
+ }
+ arr[middle] = arr[k];
+ arr[k] = arr[middle + 1];
+ arr[middle + 1] = temp;
+ middle = middle + 1;
+ k = k + 1;
+ continue;
+ }
+ k = k + 1;
+ }
+
+ if (middle == (N - 1) / 2 || middle == N / 2) {
+ return middle;
+ }
+ if (middle > (N + 1) / 2) {
+ return median(arr, N, i, middle - 1);
+ } else {
+ return median(arr, N, middle + 1, j);
+ }
+}
+
+int arr[100005];
+
+int main() {
+ int N = getarray(arr);
+ starttime();
+ int med = median(arr, N, 0, N - 1);
+ stoptime();
+ putint(med);
+ putch(10);
+ return 0;
+}