[Mndiff-dev] [mndiff]: r31 - trunk/mnzip/mnzip.c

michael subversion at mplayerhq.hu
Sun Jun 17 11:11:20 CEST 2007


Author: michael
Date: Sun Jun 17 11:11:20 2007
New Revision: 31

Log:
faster qsort2()


Modified:
   trunk/mnzip/mnzip.c

Modified: trunk/mnzip/mnzip.c
==============================================================================
--- trunk/mnzip/mnzip.c	(original)
+++ trunk/mnzip/mnzip.c	Sun Jun 17 11:11:20 2007
@@ -215,18 +215,29 @@ static void qsort2(uint8_t **ptr, int *i
         else if(idx[len-1] > pivot ) pivot= idx[len-1];
     }
     i=0;
-    while(j<=k){
+    while(idx[k] > pivot)
+        k--;
+    for(;j<=k; j++){
         int v= idx[j];
-        if(v == pivot)
-            j++;
-        else if(v<pivot){
+        if(v<pivot){
             FFSWAP(int, idx[j], idx[i]);
             FFSWAP(uint8_t*, ptr[j], ptr[i]);
-            j++;
             i++;
-        }else{
-            FFSWAP(int, idx[j], idx[k]);
-            FFSWAP(uint8_t*, ptr[j], ptr[k]);
+        }else if(v>pivot){
+            int v2= idx[k];
+            uint8_t *p2= ptr[k];
+            idx[k]= v;
+            ptr[k]= ptr[j];
+            if(v2 == pivot){
+                idx[j]= v2;
+                ptr[j]= p2;
+            }else{
+                idx[j]= idx[i];
+                ptr[j]= ptr[i];
+                idx[i]= v2;
+                ptr[i]= p2;
+                i++;
+            }
             do{
                 k--;
             }while(idx[k] > pivot);



More information about the Mndiff-dev mailing list