improved the standard console handler to handle when ARGV has been overridden in a script
This commit is contained in:
56
qse/regress/awk/quicksort.awk
Normal file
56
qse/regress/awk/quicksort.awk
Normal file
@ -0,0 +1,56 @@
|
||||
#.H1 Quicksort.awk
|
||||
#.H2 Synopsis
|
||||
#.P cat numbers | gawk -f quicksort.awk
|
||||
#.H2 Download
|
||||
#.P
|
||||
#Download from
|
||||
#.URL http://lawker.googlecode.com/svn/fridge/lib/awk/quicksort1.awk LAWKER.
|
||||
#.H2 Description
|
||||
#.P
|
||||
#Some Awk implementations come with built in sort routines (e.g. Gawk's asort and asorti functions). But it
|
||||
#can be useful to code these yourself, especially in you are doing data structure tricks.
|
||||
#.P
|
||||
#Quicksort selects a pivot and divides the data into values above and below the pivot. Sorting then
|
||||
#recurses on these sub-lists.
|
||||
#.H2 Code
|
||||
#.H3 Loading the data
|
||||
#.PRE
|
||||
#BEGIN { RS = ""; FS = "\n" }
|
||||
{ A[NR] = $1 }
|
||||
END {
|
||||
qsort(A, 1, NR)
|
||||
for (i = 1; i <= NR; i++) {
|
||||
print A[i] #+ 0;
|
||||
#if (i == NR) break
|
||||
#print ""
|
||||
}
|
||||
}
|
||||
#./PRE
|
||||
#.H3 Sorting the data
|
||||
#.PRE
|
||||
function qsort(A, left, right, i, last) {
|
||||
if (left >= right)
|
||||
return
|
||||
swap(A, left, left+int((right-left+1)*rand()))
|
||||
last = left
|
||||
for (i = left+1; i <= right; i++)
|
||||
{
|
||||
# print A[i] "/" A[left] "....." (A[i] < A[left])
|
||||
if (A[i] < A[left])
|
||||
{
|
||||
swap(A, ++last, i)
|
||||
}
|
||||
}
|
||||
swap(A, left, last)
|
||||
qsort(A, left, last-1)
|
||||
qsort(A, last+1, right)
|
||||
}
|
||||
function swap(A, i, j, t) {
|
||||
t = A[i]; A[i] = A[j]; A[j] = t
|
||||
}
|
||||
#./PRE
|
||||
#.H2 See also
|
||||
#.P
|
||||
#.URL http://awk.info/?quicksort2 quicksort2.awk
|
||||
#.H2 Authors
|
||||
#.P Alfred Aho, Peter Weinberger, Brian Kernighan, 1988.
|
||||
Reference in New Issue
Block a user