[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