Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.c > #15174

Re: Is there any way to refer to another array in qsort's compare function?

From Dr Nick <3-nospam@temporary-address.org.uk>
Newsgroups comp.lang.c
Subject Re: Is there any way to refer to another array in qsort's compare function?
Date 2011-12-29 12:59 +0000
Message-ID <87y5tvcz48.fsf@temporary-address.org.uk> (permalink)
References <f7d05964-b7de-45b1-afde-7ac9d7c38e9b@x34g2000prb.googlegroups.com> <0.7769aa1f0654775b9623.20111229115814GMT.87ehvnd1yh.fsf@bsb.me.uk> <17404410.1167.1325161235089.JavaMail.geo-discussion-forums@prmw6> <8739c3eepl.fsf@temporary-address.org.uk> <10648047.217.1325162896778.JavaMail.geo-discussion-forums@prj1>

Show all headers | View raw


88888 Dihedral <dihedral88888@googlemail.com> writes:

> Dr Nick於 2011年12月29日星期四UTC+8下午8時37分26秒寫道:
>> 88888 Dihedral <dihedr...@googlemail.com> writes:
>> 
>> > Ben Bacarisse於 2011年12月29日星期四UTC+8下午7時58分14秒寫道:
>> >> Stone <sto...@gmail.com> writes:
>> >> 
>> >> > Here's the problem.
>> >> >
>> >> > I wrote a function 'int my_compare(const void *, const void *);' and
>> >> > passed it to qsort() of stdlib.h, in order to sort an array named
>> >> > *ptr* which contains indices of another array *data*. By that I
>> >> > intended to sort elements of *ptr* (i.e. ptr[i]) using data[ptr[i]] as
>> >> > the key value.
>> >> >
>> >> > However, the *data* array was defined as static in main(), and seemed
>> >> > not easy to access in my_compare(). Is there any way to achieve this?
>> >> 
>> >> You can either move the array so that it is defined at file scope
>> >> (i.e. outside main) or you can arrange for there to be a file-scope
>> >> pointer to it:
>> >> 
>> >>   #include <stdlib.h>
>> >>   #include <stdio.h>
>> >>    
>> >>   int *aux_sort_ptr;
>> >>    
>> >>   int my_compare(const void *p1, const void *p2)
>> >>   {
>> >>       const int *ip1 = p1, *ip2 = p2;
>> >>       return aux_sort_ptr[*ip1] - aux_sort_ptr[*ip2];
>> >>   }
>> >>    
>> >>   int main(void)
>> >>   {
>> >>       static int data[] = { 3, 1, 2 };
>> >>       int idx[] = { 1, 2, 3 };
>> >>       aux_sort_ptr = data;
>> >>       qsort(idx, sizeof idx/sizeof *idx, sizeof *idx, my_compare);
>> >>       for (int i = 0; i < sizeof idx/sizeof *idx; i++)
>> >>            printf("idx[%d] = %d, data[%d] = %d\n",
>> >>                   i, idx[i], idx[i], data[idx[i]]);
>> >>   }
>> >> 
>> >> This is ugly (and problematic in threaded code), but there's no elegant
>> >> way round it using standard C.  Many systems have other sort functions
>> >> whose comparison function can be handed another void * (see Dr Nick's
>> >> reply) but I don't think and have become common enough to though of as
>> >> "almost standard".
>> >
>> > This method uses more memory. 
>> 
>> One pointer's worth.
>> 
>> > Do you think that just 
>> > overloading the comparison function by OOP can make it not choking at all?
>> 
>> Why do you say that "Do you think that just overloading the comparison
>> function by OOP can make it not choking at all?"
>> 
>> To Stone: No-one has a clue what 88888 Dihedral is on about.  Many of us
>> suspect him to be a poor attempt to pass the Turing test.  Whatever he
>> is, don't worry about his comments.
>
>   Just feed a segment of repeated integers, say, 3,4,5,6,3,4, 5, 6 
> 3,4,5, 6.... for several thousands then the program you posted will choke at the segment. 

See what I mean?  It's complete gibberish without any context,
understanding of code or relevance to the question.

a) I didn't post any program
b) The only way this differs from what the OP described but didn't post
is that aux_pointer has been added.
c) Changing the comparison function will have no effect on the memory
used
d) Do you ever answer questions or just spray out this stuff?

Sorry to the rest of you for this, I'm not yet killfiling him as I worry
that he'll confuse people asking for help.  I'm also trying to diagnose
what's going on.
-- 
Online waterways route planner            | http://canalplan.eu
Plan trips, see photos, check facilities  | http://canalplan.org.uk

Back to comp.lang.c | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread


Thread

Is there any way to refer to another array in qsort's compare function? Stone <stonekyx@gmail.com> - 2011-12-29 00:27 -0800
  Re: Is there any way to refer to another array in qsort's compare function? Dr Nick <3-nospam@temporary-address.org.uk> - 2011-12-29 08:57 +0000
  Re: Is there any way to refer to another array in qsort's compare function? Ben Bacarisse <ben.usenet@bsb.me.uk> - 2011-12-29 11:58 +0000
    Re: Is there any way to refer to another array in qsort's compare function? 88888 Dihedral <dihedral88888@googlemail.com> - 2011-12-29 04:20 -0800
      Re: Is there any way to refer to another array in qsort's compare function? Dr Nick <3-nospam@temporary-address.org.uk> - 2011-12-29 12:37 +0000
        Re: Is there any way to refer to another array in qsort's compare function? 88888 Dihedral <dihedral88888@googlemail.com> - 2011-12-29 04:48 -0800
          Re: Is there any way to refer to another array in qsort's compare function? Dr Nick <3-nospam@temporary-address.org.uk> - 2011-12-29 12:59 +0000
            Re: Is there any way to refer to another array in qsort's compare function? Geoff <geoff@invalid.invalid> - 2011-12-29 10:09 -0800
              Re: Is there any way to refer to another array in qsort's compare function? 88888 Dihedral <dihedral88888@googlemail.com> - 2011-12-29 17:50 -0800
                Re: Is there any way to refer to another array in qsort's compare function? Geoff <geoff@invalid.invalid> - 2011-12-29 19:29 -0800
                Re: Is there any way to refer to another array in qsort's compare function? 88888 Dihedral <dihedral88888@googlemail.com> - 2011-12-30 00:36 -0800
                Re: Is there any way to refer to another array in qsort's compare function? Bull in a China Blue Shop <chine.bleu@yahoo.com> - 2011-12-30 00:52 -0800
                Re: Is there any way to refer to another array in qsort's compare function? 88888 Dihedral <dihedral88888@googlemail.com> - 2011-12-30 02:16 -0800
              Re: Is there any way to refer to another array in qsort's compare function? 88888 Dihedral <dihedral88888@googlemail.com> - 2011-12-29 18:01 -0800
            Re: Is there any way to refer to another array in qsort's compare function? James Kuyper <jameskuyper@verizon.net> - 2011-12-29 13:21 -0500
        Re: Is there any way to refer to another array in qsort's compare function? 88888 Dihedral <dihedral88888@googlemail.com> - 2011-12-30 23:18 -0800
    Re: Is there any way to refer to another array in qsort's compare function? 88888 Dihedral <dihedral88888@googlemail.com> - 2012-01-07 23:40 -0800
      Re: Is there any way to refer to another array in qsort's compare function? pete <pfiland@mindspring.com> - 2012-01-08 07:26 -0500
        Re: Is there any way to refer to another array in qsort's compare function? Ben Bacarisse <ben.usenet@bsb.me.uk> - 2012-01-08 12:50 +0000
          Re: Is there any way to refer to another array in qsort's compare function? 88888 Dihedral <dihedral88888@googlemail.com> - 2012-01-08 06:02 -0800
        Re: Is there any way to refer to another array in qsort's compare function? Phil Carmody <thefatphil_demunged@yahoo.co.uk> - 2012-01-17 12:35 +0200
  Re: Is there any way to refer to another array in qsort's compare function? Bull in a China Blue Shop <chine.bleu@yahoo.com> - 2011-12-29 05:07 -0800
    Re: Is there any way to refer to another array in qsort's compare function? Ben Bacarisse <ben.usenet@bsb.me.uk> - 2011-12-29 14:16 +0000
      Re: Is there any way to refer to another array in qsort's compare function? Ben Bacarisse <ben.usenet@bsb.me.uk> - 2011-12-29 15:29 +0000
        Re: Is there any way to refer to another array in qsort's compare function? 88888 Dihedral <dihedral88888@googlemail.com> - 2011-12-29 09:33 -0800
        Re: Is there any way to refer to another array in qsort's compare function? 88888 Dihedral <dihedral88888@googlemail.com> - 2011-12-29 15:40 -0800
  Re: Is there any way to refer to another array in qsort's compare function? James Kuyper <jameskuyper@verizon.net> - 2011-12-29 10:50 -0500
  Re: Is there any way to refer to another array in qsort's compare function? pete <pfiland@mindspring.com> - 2012-01-07 20:50 -0500

csiph-web