home *** CD-ROM | disk | FTP | other *** search
- {procedure does recursive quick sort}
- {NDP Fortran calling program defines array of REAL*4}
- {Therefore remember to compile NDP Pascal subroutine}
- {with P3 switch, or declare array of float}
-
- const
- max = 300;
- type
- ary = array[1..max] of real;
-
- procedure swap(var x,y:real);
- var
- tmp:real;
-
- begin
- tmp := x;
- x := y;
- y := tmp
- end {swap};
-
- procedure quiksort_(var x:ary;var limit:integer);
-
- var
- n:integer;
-
- procedure qsort(var x:ary;m,n:integer);
-
- var
- i,j:integer;
-
- procedure partition(var a:ary;var i,j:integer;
- left,right:integer);
- var
- midpoint:real;
-
- begin
- midpoint := a[(left+right)div 2];
- i := left;
- j := right;
- while i<=j do
- begin
- while a[i] < midpoint do
- i := i + 1;
- while midpoint < a[j] do
- j := j - 1;
- if i <= j then
- begin
- swap(a[i],a[j]);
- i := i + 1;
- j := j - 1
- end
- end {while}
- end {partition};
-
- begin {qsort}
- if m < n then
- begin
- partition(x,i,j,m,n) {divide in two};
- qsort(x,m,j) {sort left part};
- qsort(x,i,n) {sort right part}
- end
- end {qsort};
-
- begin {quiksort_}
- n := limit;
- qsort(x,1,n)
- end {quiksort_};
-