aboutsummaryrefslogtreecommitdiff
path: root/tests/sysy_lvX/064_sort_test7.sy
diff options
context:
space:
mode:
Diffstat (limited to 'tests/sysy_lvX/064_sort_test7.sy')
-rw-r--r--tests/sysy_lvX/064_sort_test7.sy87
1 files changed, 87 insertions, 0 deletions
diff --git a/tests/sysy_lvX/064_sort_test7.sy b/tests/sysy_lvX/064_sort_test7.sy
new file mode 100644
index 0000000..b4bbd08
--- /dev/null
+++ b/tests/sysy_lvX/064_sort_test7.sy
@@ -0,0 +1,87 @@
+int n;
+int Merge(int array[], int low, int middle, int high)
+{
+ int n1;
+ n1 = middle - low + 1;
+ int n2;
+ n2 = high - middle;
+ int L[10];
+ int R[10];
+ int i;
+ i = 0;
+ int j;
+ j = 0;
+
+ while(i < n1){
+ L[i] = array[i + low];
+ i = i + 1;
+ }
+ while(j < n2){
+ R[j] = array[j + middle +1];
+ j = j + 1;
+ }
+ i = 0;
+ j = 0;
+ int k;
+ k = low;
+ while(i!=n1 && j!= n2)
+ {
+ if(L[i] < R[j] + 1){
+ array[k] = L[i];
+ k = k + 1;
+ i = i + 1;
+ }
+ else{
+ array[k] = R[j];
+ k = k + 1;
+ j = j + 1;
+ }
+ }
+ while(i < n1){
+ array[k] = L[i];
+ k = k + 1;
+ i = i + 1;
+
+ }
+ while(j < n2){
+ array[k] = R[j];
+ k = k + 1;
+ j = j + 1;
+ }
+ return 0;
+}
+
+int MergeSort(int array[], int p, int q)
+{
+ if(p < q)
+ {
+ int mid;
+ mid = (p+q)/2;
+ int tmp;
+ tmp = MergeSort(array, p, mid);
+ tmp = mid + 1;
+ tmp = MergeSort(array, tmp, q);
+ tmp = Merge(array,p, mid, q);
+ }
+ return 0;
+}
+
+int main(){
+ n = 10;
+ int a[10];
+ a[0]=4;a[1]=3;a[2]=9;a[3]=2;a[4]=0;
+ a[5]=1;a[6]=6;a[7]=5;a[8]=7;a[9]=8;
+ int i;
+ i = 0;
+ int tmp;
+ tmp = n - 1;
+ i = MergeSort(a, i, tmp);
+ while (i < n) {
+ tmp = a[i];
+ putint(tmp);
+ tmp = 10;
+ putch(tmp);
+ i = i + 1;
+ }
+ return 0;
+}