aboutsummaryrefslogtreecommitdiff
path: root/tests/sysy_lvX/067_sort_test7.sy
diff options
context:
space:
mode:
Diffstat (limited to 'tests/sysy_lvX/067_sort_test7.sy')
-rw-r--r--tests/sysy_lvX/067_sort_test7.sy47
1 files changed, 47 insertions, 0 deletions
diff --git a/tests/sysy_lvX/067_sort_test7.sy b/tests/sysy_lvX/067_sort_test7.sy
new file mode 100644
index 0000000..50561d3
--- /dev/null
+++ b/tests/sysy_lvX/067_sort_test7.sy
@@ -0,0 +1,47 @@
+int buf[2][100];
+
+// sort [l, r)
+void merge_sort(int l, int r)
+{
+ if (l + 1 >= r)
+ return;
+
+ int mid = (l + r) / 2;
+ merge_sort(l, mid);
+ merge_sort(mid, r);
+
+ int i = l, j = mid, k = l;
+ while (i < mid && j < r) {
+ if (buf[0][i] < buf[0][j]) {
+ buf[1][k] = buf[0][i];
+ i = i + 1;
+ } else {
+ buf[1][k] = buf[0][j];
+ j = j + 1;
+ }
+ k = k + 1;
+ }
+ while (i < mid) {
+ buf[1][k] = buf[0][i];
+ i = i + 1;
+ k = k + 1;
+ }
+ while (j < r) {
+ buf[1][k] = buf[0][j];
+ j = j + 1;
+ k = k + 1;
+ }
+
+ while (l < r) {
+ buf[0][l] = buf[1][l];
+ l = l + 1;
+ }
+}
+
+int main()
+{
+ int n = getarray(buf[0]);
+ merge_sort(0, n);
+ putarray(n, buf[0]);
+ return 0;
+}