From 4022e5c95210631e4aceb08eaf9d9071aa5aefc4 Mon Sep 17 00:00:00 2001 From: Richard Qin Date: Tue, 15 Sep 2026 08:16:43 +0800 Subject: Set up a git repo --- tests/upload/merge_sort.sy | 77 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100755 tests/upload/merge_sort.sy (limited to 'tests/upload/merge_sort.sy') diff --git a/tests/upload/merge_sort.sy b/tests/upload/merge_sort.sy new file mode 100755 index 0000000..3d9df50 --- /dev/null +++ b/tests/upload/merge_sort.sy @@ -0,0 +1,77 @@ +int arr[100]; + +void merge(int start, int mid, int end) { + int result[100]; + int k = 0; + int i = start; + int j = mid + 1; + while (i <= mid && j <= end) { + if (arr[i] < arr[j]) { + result[k] = arr[i]; + k = k + 1; + i = i + 1; + } + else { + result[k] = arr[j]; + k = k + 1; + j = j + 1; + } + } + if (i == mid + 1) { + while (j <= end) { + result[k] = arr[j]; + k = k + 1; + j = j + 1; + } + } + if (j == end + 1) { + while (i <= mid) { + result[k] = arr[i]; + k = k + 1; + i = i + 1; + } + } + j = 0; + i = start; + while(j < k){ + arr[i] = result[j]; + i = i + 1; + j = j + 1; + } +} + +void mergeSort( int start, int end) { + if (start >= end) + return; + int mid = (start + end) / 2; + mergeSort(start, mid); + mergeSort(mid + 1, end); + merge(start, mid, end); +} + +void printArray(int n) +{ + int i = 0; + while (i < n) + { + putint(arr[i]); + putch(32); + // printf("%d ", arr[i]); + i = i + 1; + } +} + +int main() +{ + int n; + int i = 0; + n = getint(); + while (i < n) + { + arr[i] = getint(); + i = i + 1; + } + mergeSort(0,n-1); + printArray(n); + return 0; +} \ No newline at end of file -- cgit v1.2.3