I have a large sequence of simple structs, about 5M long. I print its `repr` 
before and after sorting. It has lots of data before, but it's all zeroes after 
-- except the first element, which is unchanged.

What could explain this behavior? I suspect the merge-sort itself.
    
    
    import algorithm
    
    type
      seq_coor_t* = cint
      
      d_path_data2* = object
        d*: seq_coor_t
        k*: seq_coor_t
        pre_k*: seq_coor_t
        x1*: seq_coor_t
        y1*: seq_coor_t
        x2*: seq_coor_t
        y2*: seq_coor_t
    
    proc compare_d_path*(arg1, arg2: d_path_data2): int =
      if arg1.d - arg2.d == 0:
        return arg1.k - arg2.k
      else:
        return arg1.d - arg2.d
    
    proc d_path_sort*(path_base: var seq[d_path_data2]) =
      echo "sort:", len(path_base), " max:", $max_idx)
      path_base.sort(compare_d_path)
      #qsort(base, max_idx, sizeof(d_path_data2), compare_d_path);
    

This was originally in C, and I will probably need to use qsort anyway, so I 
can avoid sorting the unused portion of the array. (I wish Nim offered an 
ArrayView, compatible with openarray.) But it's disturbing that I cannot can 
expected behavior from this standard algorithm. Any ideas?

(Yes, I've run `newSeq` before assigning value. Yes, I use `debug` mode.)

Reply via email to