Sorting arrays


Closed Thread
Results 1 to 7 of 7

Thread: Sorting arrays

  1. #1

    Default Sorting arrays

    I am trying to sort paired ADC readings in two arrays. In a loop, an0 an1 are sampled and stored
    in seperate arrays. These become matched pairs for that time period. I need the min/max for all the readings for AN0. No problem with one array. My problem is keeping the AN1 samples, paired with the original AN0 samples after sorting. If anyone has an approach, I would really appreciate
    the help. Thanks
    Example:
    Sampled RAW data
    Array
    Pos AN0 AN1
    1 512 514
    2 512 512
    3 998 326
    4 1021 270
    5 640 499
    6 300 504
    7 423 511
    8 512 512
    9 512 514
    10 510 512
    11 511 512
    12 515 512

    What I need below

    SORTED AN0 IN ASSENDING ORDER, AN1 STAYS PAIRED WITH ORIGINAL AN0
    New Pos AN0 AN1 Old Pos
    1 300 504 6
    2 423 511 7
    3 510 512 10
    4 511 512 11
    5 512 514 1
    6 512 512 2
    7 512 512 8
    8 512 514 9
    9 515 512 12
    10 640 499 5
    11 998 326 3
    12 1021 270 4

    The code below is based on Melanie's, which appeared in post 4 of this thread
    http://www.picbasic.co.uk/forum/showthread.php?t=6734

    I hope this can be modified to do what I need

    Code:
    SAMPLE_AN0 WORD [12]
    SAMPLE_AN1 WORD [12]
    CounterA var BYTE
    DataTemp var WORD
    Getsamples:
     For A = 1 to 12
      adcin 0 SAMPLE_AN0[A]
      adcin 1 SAMPLE_AN1[A]
     NEXT A
    Sortdata: 'THIS WILL SORT SAMPLES_AN0 not SAMPLE_AN1
    CounterA=0
    SortArrayLoop:
    If SAMP_AN0[CounterA+1] < SAMP_AN0[CounterA] then
        DataTemp = SAMP_AN0[CounterA]
        SAMP_AN0[CounterA] = SAMP_AN0[CounterA+1]
        SAMP_AN0[CounterA+1]= DataTemp
    If CounterA > 0 then CounterA = CounterA - 2
        endif
        CounterA = CounterA + 1
    If CounterA < 11 then goto SortArrayLoop
    END
    Last edited by mark_s; - 21st March 2012 at 22:08. Reason: format changed when postedm, sorry

  2. #2
    Join Date
    Jan 2005
    Location
    Montreal, Quebec, Canada
    Posts
    2,601


    Did you find this post helpful? Yes | No

    Default Re: Sorting arrays

    Off the top of my head again, what if you concatenate the numbers?

    510512
    511512

    No matter what you have in the last 3 positions, 510 will always be in front of 511.

    Robert

  3. #3
    Join Date
    Nov 2003
    Location
    Greece
    Posts
    3,807


    Did you find this post helpful? Yes | No

    Default Re: Sorting arrays

    Maybe for every entry have an array of 4 words?

    Sorting based on the second element of the array.

    Ioannis

  4. #4


    Did you find this post helpful? Yes | No

    Default Re: Sorting arrays

    Thanks for the feedback.

    Demon, not sure I follow your idea?

    Ioannis, I think this is the way. An array of arrays.
    Are you suggesting a 4 word array as a Long variable?

    Every data base or logger must deal with this problem. So I'm sure there
    is a standard way. Most examples show the data being processed in a
    pc using excel or VB and not in a pic.

    Thanks again

  5. #5
    Join Date
    Jul 2003
    Location
    Colorado Springs
    Posts
    4,959


    Did you find this post helpful? Yes | No

    Default Re: Sorting arrays

    As you move the AN0 samples, move the AN1 samples the same way...
    Code:
    SAMPLE_AN0 WORD [12]
    SAMPLE_AN1 WORD [12]
    CounterA var BYTE
    DataTemp var WORD
    Getsamples:
     For A = 1 to 12
      adcin 0 SAMPLE_AN0[A]
      adcin 1 SAMPLE_AN1[A]
     NEXT A
    Sortdata: 'THIS WILL SORT SAMPLES_AN0
    CounterA=0
    SortArrayLoop:
    If SAMP_AN0[CounterA+1] < SAMP_AN0[CounterA] then
        DataTemp = SAMP_AN0[CounterA]
        SAMP_AN0[CounterA] = SAMP_AN0[CounterA+1]
        SAMP_AN0[CounterA+1]= DataTemp
        DataTemp = SAMP_AN1[CounterA]
        SAMP_AN1[CounterA] = SAMP_AN1[CounterA+1]
        SAMP_AN1[CounterA+1]= DataTemp
    If CounterA > 0 then CounterA = CounterA - 2
        endif
        CounterA = CounterA + 1
    If CounterA < 11 then goto SortArrayLoop
    END
    DT

  6. #6


    Did you find this post helpful? Yes | No

    Default Re: Sorting arrays

    Darrel,

    Thank you for the answer!

    Regards

  7. #7
    Join Date
    Nov 2003
    Location
    Greece
    Posts
    3,807


    Did you find this post helpful? Yes | No

    Default Re: Sorting arrays

    As Darrel replied, there is no need for a long variable. Besides you have 4 discrete variable that you have to treat as a whole.

    Ioannis

Members who have read this thread : 1

You do not have permission to view the list of names.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts