home *** CD-ROM | disk | FTP | other *** search
- Path: EU.net!sun4nl!xs4all!usenet
- From: muaddib@xs4all.nl (Thomas van Gulick)
- Newsgroups: comp.lang.c,comp.sys.amiga.programmer
- Subject: MY SORT DOESN'T QUICK!
- Date: 26 Mar 1996 20:55:14 GMT
- Organization: XS4ALL, networking for the masses
- Message-ID: <2082.6659T1310T2974@xs4all.nl>
- NNTP-Posting-Host: undiscovered.xs4all.nl
- X-Newsreader: THOR 2.22 (Amiga;TCP/IP) *UNREGISTERED*
-
- Help! My Sort doesn't Quick (ie, it doesn't work for all inputs!)
- Something goes wrong when the array is being split into two parts,
- but how to solve it, beats me. (ULONG = unsigned long btw)
-
- The array where this function fails:
-
- { 110, 1664, 96781, 1, 5, 10, 1120, 10, 130, 10 }
-
- VOID
- QuickSort
- (
- ULONG Array[],
- ULONG lo0,
- ULONG hi0
- )
- {
- ULONG lo = lo0;
- ULONG hi = hi0;
-
- if( lo < hi )
- {
- ULONG mid;
-
- mid = Array[ ( lo + hi ) / 2 ];
-
- while( lo < hi )
- {
- while( Array[ lo ] < mid )
- lo ++;
-
- while( Array[ hi ] > mid )
- hi --;
-
- if( lo < hi )
- {
- ULONG swap;
-
- swap = Array[ lo ];
- Array[ lo ] = Array[ hi ];
- Array[ hi ] = swap;
-
- lo ++;
- hi --;
- }
- }
- QuickSort( Array, lo0, hi );
- QuickSort( Array, lo == hi ? lo + 1 : lo, hi0 );
- }
- }
-
- An other version I tried was: (but this one uses some more instructions
- and is therefore a bit slower)
-
- VOID
- QuickSort
- (
- ULONG Array[],
- ULONG lo0,
- ULONG hi0
- )
- {
- ULONG lo = lo0;
- ULONG hi = hi0;
-
- if( lo < hi )
- {
- ULONG mid;
-
- mid = Array[ ( lo + hi ) / 2 ];
-
- while( lo < hi )
- {
- ULONG swap;
-
- while( lo < hi && Array[ lo ] < mid )
- lo ++;
-
- while( lo < hi && Array[ hi ] >= mid )
- hi --;
-
- swap = Array[ lo ];
- Array[ lo ] = Array[ hi ];
- Array[ hi ] = swap;
-
-
- }
- if( hi < lo )
- {
- ULONG swap;
-
- swap = hi;
- hi = lo;
- lo = swap;
- }
-
- QuickSort( Array, lo0, lo );
- QuickSort( Array, lo == lo0 ? lo + 1 : lo, hi0 );
- }
- }
-
- I need an answer or solution as soon as possible! It's of a live saving matter!
- (Well sort of:)
-
- Oh, and don't tell me it is built into my compiler.
-
- Thomas
- --
- http://www.xs4all.nl/~muaddib/mf/
-
-