Reading Address Book in a sorted order

I am writing a script that exports the Address Book. Is there a simple way to read this list in a sorted order?
The names I am reading now appear to be in a random order (maybe the order they we entered).

If I am going to have to sort the list myself can someone point me to a good code snippet for this.

Thanks

This is a very fast QuickSort algorithm AppleScripted by Nigel Garvey and Arthur Knapp:

qsort(l, 1, -1)

on qsort(theList, l, r)
	-- Nigel Garvey & Arthur Knapp. Sorts the list in place so copy before testing.
	-- Save the original to a new variable if you want to keep it unaltered.
	script o
		property cutoff : 10
		property p : theList
		
		on qsrt(l, r)
			set i to l
			set j to r
			set v to my p's item ((l + r) div 2)
			
			repeat while (j > i)
				set u to my p's item i
				repeat while (u < v)
					set i to i + 1
					set u to my p's item i
				end repeat
				
				set w to my p's item j
				repeat while (w > v)
					set j to j - 1
					set w to my p's item j
				end repeat
				
				if (i > j) then
				else
					set my p's item i to w
					set my p's item j to u
					set i to i + 1
					set j to j - 1
				end if
			end repeat
			
			if (j - l < cutoff) then
			else
				qsrt(l, j)
			end if
			
			if (r - i < cutoff) then
			else
				qsrt(i, r)
			end if
		end qsrt
		
		on isrt(l, r)
			set x to l
			set z to l + cutoff - 1
			if (z > r) then set z to r
			
			set v to my p's item x
			repeat with y from (x + 1) to z
				if (my p's item y < v) then
					set x to y
					set v to my p's item y
				end if
			end repeat
			
			tell my p's item l
				set my p's item l to v
				set my p's item x to it
			end tell
			
			set u to my p's item (l + 1)
			repeat with i from (l + 2) to r
				set v to my p's item i
				if (v < u) then
					set my p's item i to u
					repeat with j from (i - 2) to l by -1
						if (v < my p's item j) then
							set my p's item (j + 1) to my p's item j
						else
							set my p's item (j + 1) to v
							exit repeat
						end if
					end repeat
				else
					set u to v
				end if
			end repeat
		end isrt
	end script
	
	set listLen to (count theList)
	if (listLen > 1) then -- otherwise the handler will error
		-- Translate negative indices
		if (l < 0) then set l to listLen + l + 1
		if (r < 0) then set r to listLen + r + 1
		
		if (r = l) then
			-- No point in sorting just one item
		else
			-- Transpose transposed indices
			if (l > r) then
				set temp to l
				set l to r
				set r to temp
			end if
			
			if (r - l < o's cutoff) then
				-- Skip the Quicksort if cutoff or less items
			else
				o's qsrt(l, r)
			end if
			o's isrt(l, r)
		end if
	end if
end qsort

For my curiosity, how are you exporting?
Would you mind posting that code?

Thanks,

Craig

Thanks Nigel.

Craig, this is very rough but the basics are:

tell application "Address Book"
	set OutputList to {}
	set CurPerson to ""
	set peopleCount to (count every person)
	repeat with i from 1 to peopleCount
		
		set PersonsName to ""
		set CompamyName to ""
		set label1 to "" --
		set PhoneNum1 to ""
		
		try
			set PersonsName to (name of person i)
			set CompanyName to (organization of person i)
			set label1 to "(" & the first character of (label of first phone of person i as string) & ") "
			set PhoneNum1 to (value of first phone of person i)
		end try
		
		set CurPerson to PersonsName & "," & CompanyName & "," & label1 & PhoneNum1
		
		set OutputList to OutputList & CurPerson
		
	end repeat
	
end tell