Re: stable sorting for Juergen Luethje

new topic     » topic index » view thread      » older message » newer message

Juergen:

This is will work.

Bernie

-------------------==--------------------==------------------------
include sort.e

constant statistics = {
   {"Doe", 3},
   {"Einstein", 1},
   {"Goldberg", 1},
   {"Irving", 4},
   {"Jones", 3},
   {"Miller", 2},
   {"Neuman", 2},
   {"Petersen", 4},
   {"Smith", 2},
   {"Zander", 5}
}
--
sequence temp, sorted
temp = repeat({0,0}, length(statistics))
--
integer field
integer by_field
object Obj
--
function compare_field(sequence a, sequence b)
   -- Compare two sequences (records) according to field.
   return compare(a[field],b[field])
end function
-- set routine id
by_field = routine_id("compare_field")
--
-- do custom sort on first field
field = 1
sorted = custom_sort(by_field,statistics)
--
puts(1, "sorted by name\n")
for i = 1 to length(sorted) do
   printf(1, "%12s %d\n", sorted[i])
end for
if getc(0) then end if
-- swap field 1 and 2
for i = 1 to length(sorted) do
Obj = sorted[i][1]
temp[i][1] = sorted[i][2]
temp[i][2] = Obj
end for
-- do sort on complete record
sorted = sort(temp)
-- swap field 1 and 2 back to normal
for i = 1 to length(sorted) do
Obj = sorted[i][1]
temp[i][1] = sorted[i][2]
temp[i][2] = Obj
end for
--
puts(1, "\nsorted by mark\n")
for i = 1 to length(temp) do
   printf(1, "%12s %d\n", temp[i])
end for
if getc(0) then end if
--
-------------------==--------------------==---------------------------

new topic     » topic index » view thread      » older message » newer message

Search



Quick Links

User menu

Not signed in.

Misc Menu