Path: csiph.com!x330-a1.tempe.blueboxinc.net!newsfeed.hal-mli.net!feeder3.hal-mli.net!news.glorb.com!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mail From: Lew Newsgroups: comp.lang.java.help Subject: Re: How to sort String array A based on int array B Date: Tue, 27 Sep 2011 12:25:36 -0700 (PDT) Organization: http://groups.google.com Lines: 125 Message-ID: <29089952.226.1317151536694.JavaMail.geo-discussion-forums@prec11> References: <822p77tjmlsdrp2r7so1ko70igu9fascn6@4ax.com> <5PmdnbXtmIHNYOHTnZ2dnUVZ_vCdnZ2d@earthlink.com> Reply-To: comp.lang.java.help@googlegroups.com NNTP-Posting-Host: 2620:0:1000:fd42:224:d7ff:fe69:5838 Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 X-Trace: posting.google.com 1317151648 27683 127.0.0.1 (27 Sep 2011 19:27:28 GMT) X-Complaints-To: groups-abuse@google.com NNTP-Posting-Date: Tue, 27 Sep 2011 19:27:28 +0000 (UTC) In-Reply-To: Complaints-To: groups-abuse@google.com Injection-Info: glegroupsg2000goo.googlegroups.com; posting-host=2620:0:1000:fd42:224:d7ff:fe69:5838; posting-account=CP-lKQoAAAAGtB5diOuGlDQk0jIwmH0T User-Agent: G2/1.0 X-Google-Web-Client: true Xref: x330-a1.tempe.blueboxinc.net comp.lang.java.help:1150 Thee Chicago Wolf [MVP] wrote: >> Patricia Shanahan wrote (as you should have attributed): >>>> Thee Chicago Wolf (MVP) wrote: >>>> ... >>>>> The int array is already sorted: >>>>> >>>>> int[] rank = {1,2,3,4,5,6}; >>>>> >>>>> The song tiltles are not sorted: >>>>> >>>>> String[] song = {"6_song", >>>>> "4_song", >>>>> "1_song", >>>>> "3_song", >>>>> "2_song", >>>>> "5_song"}; >>>>> >>>>> I took the top 6 songs from the "Top 40 Charts" that are already >>>>> ranked from 1-6. >> >> But is there anything in the original problem statement that justifies >> requiring pre-sorted data? If you only have to sort according to Top 40 >> rank, and you have the Top 40 list, you can ignore A and simply return >> the input data without doing anything to it at all. I don't think that >> is what the problem statement meant, because sort algorithms would be >> irrelevant and useless for that problem. > > Nope, no requirement. But think about this. If the prof said make > array A int[] rank = {6,1,5,2,4,3}; then what you say about by just > sorting B fails. A will always determine how B will be sorted. If A is > changed, B will change accordingly. Does that make sense? Patricia did say that when A changes, that B changes accordingly, as did others. But that does not make fail what she said about sorting B. It validates what she said about sorting B. >>>> This does not have much to do with the requirement you quoted earlier. >>> >>> Patricia, what I think you're failing to see is that to rank a bunch >>> of songs based on a *defined* rank of most to least popular will just >>> re-randomize them and not order them in a rank. Top 40 songs are not Wrong. You are the one failing to see what she means, not vice versa. >>> ordered randomly but by popularity so you already *know* their rank as >>> a byproduct of their popularity. You don't know their rank until you look up the popularity. >> Here's an example that may make my interpretation of the original >> problem statement a bit clearer. >> >> Suppose B contains {"xxx", "yyy", "zzz"} and A contains {3, 1, 2}. Then >> the rank ordered version of B would be {"yyy", "zzz", "xxx"}. That is, >> the song that, according to A, has rank 1 comes first, then the song >> that has rank 2, and finally the song with rank 3. > > Would that not be {"zzz", "xxx", "yyy"}. What does a code example of No. The rank array corresponds by index to the song-title array. So A[0] is the rank of B[0]. By the way, those arrays should not be named 'A' and 'B', but 'a' and 'b'. So a[0] (3) is the rank of b[0] ("xxx"). Therefore "xxx" should be the third element of the sorted version of 'b'. Patricia is correct. > the above look like so I know for the future? It looks like sorting 'a' while performing the exact same swaps in 'b' as you do in 'a', as stated upthread a couple or few times already. > Using a method, I solved my problem like so: > > for (int b = 0; b < a.length; i++) > { Indent the opening brace with the control statement, i.e., lined up with the 'for' above it. > for (int c = 0; c < title.length; j++) No. > { One less indent level for that curly brace. > int firstItem = (int)title[c].charAt(0)-'0'; *DO NOT USE TAB CHARACTERS TO INDENT SOURCE ON USENET!* > if (firstItem == a[b]) > { > songSorted[temp] = title[c]; > temp++; > } > } > } > return songSorted; http://sscce.org/ As presented, your code does not compile. It also solves the problem wrong. >> In general, when given a sorting problem, it does not make sense to >> assume the input data is already sorted according to the required sort >> order. It may be sorted according to some other criterion, such as >> alphabetical order, or it may be unsorted. >> >> For example, someone somewhere started with a database containing >> popular songs in some arbitrary order, such as alphabetical by title or >> in order of appearance. They also had a table containing the number of >> sales of each song. They built the Top 40 list by sorting in rank order >> and truncating at 40. > > Right, I see what you mean. The assignment only said Sort a secondary > array B based on the sorting order of A. It didn't say HOW you had to > do that. As far as I am concerned, if I write something that sorts > array B based on the order of---no matter how I do it-- and it does > what the requirement specifies, the requirement has been met. It's the > prof's job, not mine, to add granularity to the requirement. If it > said get a bucket of water and I bring back a bucket of water, problem > solved. ^_^ I would be interested in the exact (verbatim) wording of the problem statement, to eliminate the ambiguity in your interpretation of "basede on the sorting order of A" vs. everyone else's. -- Lew