tags:

views:

459

answers:

4

Is the best way to sort an array in Delphi is "alphanumeric".

I found this comment in an old code of my application

" The elements of this array must be in ascending, alphanumeric sort order."

If so ,what copuld be the reason?

-Vas

+5  A: 

There's no "best" way as to how to sort the elements of an array (or any collection for that fact). Sort is a humanized characteristic (things are not usually sorted) so I'm guessing the comment has more to do with what your program is expecting.

More concretely, there's probably other section of code elsewhere that expect the array elements to be sorted alphanumerically. It can be something so simple as displaying it into a TreeView already ordered so that the calling code doesn't have to sort the array first.

Arrays are represented as a contiguous memory assignment so that access is fast. Internally the compiler just does a call to GetMem asking for SizeOf(Type) * array size. There's nothing in the way the elements are sorted that affects the performance or memory size of the arrays in general. It MUST be in the program logic.

Jorge Córdoba
this commnet I mentioned , was placed before all the arrays that used "alphanumeric characters" throughout the code
vas
Well there's no special reason for that, sorting always take time and if something will hit your performance, specially if you're sorting something that does not need to be sort.
Jorge Córdoba
+2  A: 

No, there is no "best way" of sorting. And that's one of the reasons why you have multiple sorting techniques out there.
With QuickSort, you even provide the comparison function where you determine what order you ultimately want.

François
While there's no universal best way of sorting, in fact QuickSort is the UNIVERSAL BEST WAY to sort a collection in the average case (and in most of the practical cases) and that's been proved mathematically. There're other sorting methods that provide best worst case performance or which are "stable sorts" but in general quick sort is really the best sorting algorithm (apart from quantum computing and all that)
Jorge Córdoba
My point exactly, with QuickSort YOU have to provide the rule to place item A before item B according to your needs.
François
+1  A: 

Sorting an array in some way is useful when you're trying to do a binary search on the array. A binary search can be extremely fast, compared to other methods. But if the sort error is wrong, the search will be unable to find the record. Other reasons to keep arrays sorted are almost always for cosmetic reasons, to decide how the array is sent to some output.

The best way to re-order an array depends of the length of the array and the type of data it contains. A QuickSort algorithm would give a fast result in most cases. Delphi uses it internally when you're working with string-lists and some other lists. Question is, do you really need to sort it? Does it really need to stay an array even?

But the best way to keep an array sorted is by keeping it sorted from the first element that you add to it! In general, I write a wrapper around my array types, which will take care of keeping the array ordered. The 'Add' method will search for the biggest value in the array that's less or equal to the value that I want to add. I then insert the new item right after that position. To me, that would be the best solution. (With big arrays you could use the binary search method again to find the location where you need to insert the new record. It's slower than appending records to the end but you never have to wonder if it's sorted or not, since it is...

Workshop Alex
+3  A: 

Most often an array is sorted to provide faster search times. Given a list of length L, I can compare with the midpoint (L DIV 2) and quickly determine if I need to look at the greater half, or the lesser half, and recursively continue using this pattern until I either have nothing to divide by or have found my match. This is what is called a Binary search. If the list is NOT sorted, then this type of operation is not available and instead I must inspect every item in the list until I reach the end.

skamradt