blueloveTH 3 年之前
父节点
当前提交
798697e488
共有 2 个文件被更改,包括 26 次插入42 次删除
  1. 13 21
      benchmarks/sort.py
  2. 13 21
      src/builtins.h

+ 13 - 21
benchmarks/sort.py

@@ -2,27 +2,19 @@ import random
 
 a = [random.randint(-100000, 100000) for i in range(100000)]
 
-def __qsort(a: list, i: int, j: int):
-    if i>=j:
-        return
-    d1, d2 = i, j
-    mid = (i+j) // 2
-    a[mid], a[i] = a[i], a[mid]
-    u = a[i];
-    while i<j:
-        while i<j and a[j]>u:
-            j -= 1
-        if i<j:
-            a[i] = a[j]
-            i += 1
-        while i<j and a[i]<u:
-            i += 1
-        if i<j:
-            a[j] = a[i]
-            j -= 1
-    a[i] = u;
-    __qsort(a, d1, i-1)
-    __qsort(a, i+1, d2)
+def __qsort(a: list, L: int, R: int):
+    if L >= R: return;
+    mid = a[(R+L)//2];
+    i, j = L, R
+    while i<=j:
+        while a[i]<mid: i+=1
+        while a[j]>mid: j-=1
+        if i<=j:
+            a[i], a[j] = a[j], a[i]
+            i+=1
+            j-=1
+    __qsort(a, L, j)
+    __qsort(a, i, R)
 
 from dis import dis
 # dis(__qsort)

+ 13 - 21
src/builtins.h

@@ -116,27 +116,19 @@ tuple.__repr__ = lambda self: '(' + ', '.join([repr(i) for i in self]) + ')'
 list.__json__ = lambda self: '[' + ', '.join([i.__json__() for i in self]) + ']'
 tuple.__json__ = lambda self: '[' + ', '.join([i.__json__() for i in self]) + ']'
 
-def __qsort(a: list, i: int, j: int):
-    if i>=j:
-        return
-    d1, d2 = i, j
-    mid = (i+j) // 2
-    a[mid], a[i] = a[i], a[mid]
-    u = a[i];
-    while i<j:
-        while i<j and a[j]>u:
-            j -= 1
-        if i<j:
-            a[i] = a[j]
-            i += 1
-        while i<j and a[i]<u:
-            i += 1
-        if i<j:
-            a[j] = a[i]
-            j -= 1
-    a[i] = u;
-    __qsort(a, d1, i-1)
-    __qsort(a, i+1, d2)
+def __qsort(a: list, L: int, R: int):
+    if L >= R: return;
+    mid = a[(R+L)//2];
+    i, j = L, R
+    while i<=j:
+        while a[i]<mid: i+=1
+        while a[j]>mid: j-=1
+        if i<=j:
+            a[i], a[j] = a[j], a[i]
+            i+=1
+            j-=1
+    __qsort(a, L, j)
+    __qsort(a, i, R)
 
 def __list4sort(self, reverse=False):
     __qsort(self, 0, len(self)-1)