Sorts
Bubble Sort:
procedure sort ( var v: ArrayToStart; lo, up : int)
var i,j : int;
tempr : ArrayEntry;
begin
while up > lo do begin
j = lo;
for i = lo to up - 1 do
if r[i].k > r[i+1].k then begin
tempr = r[i];
r[i] = r[i+1];
r[i+1] = tempr;
j = i;
end;
up = j;
end;
end;
2-way Bubble Sort:
sort ( r , lo , up )
ArrayToStart r;
int lo, up;
{ int i,j;
while ( up > lo ) {
j = lo;
for ( i = lo; i < up; i++ ) {
if ( r[i].k > r[i+1].k)
exchange ( r , i, i+1);
j = i; }
up = j;
for ( i = up; i > lo; i-- ) {
if ( r[i].k < r[i-1].k)
exchange (r, i, i-1);
j = i; }
lo = j;
}
}
Linear Insertion Sort:
sort ( r , lo , up );
ArrayToSort r;
int lo, up;
{ int i,j;
ArrayEntry tempr;
for ( i = up - 1; i >= lo; i --) {
tempr = r[i];
for (j = i+1; j <= up && (tempr.k > r[j].k ; j ++)
r [j-1] = r [j];
r[j-1]=tempr;
}
};
Linear Insertion Sort with Sentinel :
sort ( r , lo , up )
ArrayToStart r;
int lo, up;
{int i,j;
ArrayEntry tempr;
r[up+1].k = MaximumKey;
for ( i = up - 1; i >= lo; i --) {
tempr = r[i];
for (j = i+1; tempr.k > r[j].k ; j ++)
r [j-1] = r [j];
r[j-1]=tempr;
}
}
Quicksort:
procedure sort ( var r: ArrayToSort; lo, up: int );
var i,j: int;
tempr: ArrayEntry;
begin
while up> lo do begin
i = lo;
j = up;
tempr = r[lo];
while i < j do begin
while r[j].k > tempr.k do
j = j - 1;
r[i] = r[j];
while (i < j) && (r[i].k <= tempr.k) do
i += 1;
r[j] = r[i];
end;
r[i] = tempr;
sort ( r, lo, i-1);
lo = i + 1;
end;
end;
Shellsort:
sort ( r, lo, up )
ArrayToStart r;
int lo, up;
{ int d,i,j;
ArrayEntry tempr;
for ( d = up - lo + 1; d>1;) {
if (d<5) d = 1;
else d = (5*d - 1)/11;
for(i=up-d; i>=lo;i--) {
tempr = r[i];
for ( j=i+d;j<=up && (tempr.k>r[j].k);j+=d )
r[j-d] = r[j];
r[j-d]=tempr;
}
}
}
Heapsort:
procedure sort(var r: ArrayToSort ; lo, up : int)
var i : int;
tempr : ArrayEntry;
begin
for i = (up / 2 ) downto 2 do siftup ( r, i, up);
for i = up downto 2 do begin
siftup ( r, 1, i);
tempr = r[1];
r[1] = r[i];
r[i] = tempr;
end;
procedure siftup ( var r : RecordArray; i,n: int)
var j:int;
tempr: ArrayEntry;
begin
while 2*i<=n do begin
j = 2*i;
if j < n then
if r[j].k < r[j+1].k then j+=1;
if r[i].k < r[j].k then begin
tempr = r [j];
r[j] = r[i];
r[i] = tempr;
i = j;
end;
else i = n + 1;
end;
end;
Linear Probing Sort:
Global variables:
UppBoundr: int
Assert(m+w <= UppBoundr)
m: int
m = Size of interpolation area.
w = desired overflow area.
procedure sort ( var r : ArrayToSort; lo, up : int )
var i,j,uppr : int;
r1: ArrayToSort;
begin
uppr = up + ( UppBoundr - up ) * 3 div 4;
r1 = r;
for j = lo to UppBoundr do r[j].k = NoKey;
for j = lo to up do begin
i = phi ( r1[j].k, lo, uppr);
while r[i].k != NoKey do begin
if r1[j].k < r[i].k then begin
r1[j-1] = r[i];
r[i] = r1[j];
r1[j] = r1[j-1];
end;
i+=1;
if i > UppBoundr then Error
end;
r[i] = r1[j];
end;
i = 0;
for j = lo to UppBoundr do
if r[j].k != NoKey then begin
i += 1;
r[i] = r[j];
end;
for j=i+1 to UppBoundr do r[j].k = NoKey
end;
phi ( key, lo, up )
typekey key;
int lo, up;
{int i;
i = ( key - MinKey ) * ( up - lo + 1 ) / ( MaxKey - MinKey ) + lo;
return ( i > up ? up : i < lo ? lo : i );
};
Merge Sort:
Quick Sort:
COMING SOON
procedure sort ( var v: ArrayToStart; lo, up : int)
var i,j : int;
tempr : ArrayEntry;
begin
while up > lo do begin
j = lo;
for i = lo to up - 1 do
if r[i].k > r[i+1].k then begin
tempr = r[i];
r[i] = r[i+1];
r[i+1] = tempr;
j = i;
end;
up = j;
end;
end;
2-way Bubble Sort:
sort ( r , lo , up )
ArrayToStart r;
int lo, up;
{ int i,j;
while ( up > lo ) {
j = lo;
for ( i = lo; i < up; i++ ) {
if ( r[i].k > r[i+1].k)
exchange ( r , i, i+1);
j = i; }
up = j;
for ( i = up; i > lo; i-- ) {
if ( r[i].k < r[i-1].k)
exchange (r, i, i-1);
j = i; }
lo = j;
}
}
Linear Insertion Sort:
sort ( r , lo , up );
ArrayToSort r;
int lo, up;
{ int i,j;
ArrayEntry tempr;
for ( i = up - 1; i >= lo; i --) {
tempr = r[i];
for (j = i+1; j <= up && (tempr.k > r[j].k ; j ++)
r [j-1] = r [j];
r[j-1]=tempr;
}
};
Linear Insertion Sort with Sentinel :
sort ( r , lo , up )
ArrayToStart r;
int lo, up;
{int i,j;
ArrayEntry tempr;
r[up+1].k = MaximumKey;
for ( i = up - 1; i >= lo; i --) {
tempr = r[i];
for (j = i+1; tempr.k > r[j].k ; j ++)
r [j-1] = r [j];
r[j-1]=tempr;
}
}
Quicksort:
procedure sort ( var r: ArrayToSort; lo, up: int );
var i,j: int;
tempr: ArrayEntry;
begin
while up> lo do begin
i = lo;
j = up;
tempr = r[lo];
while i < j do begin
while r[j].k > tempr.k do
j = j - 1;
r[i] = r[j];
while (i < j) && (r[i].k <= tempr.k) do
i += 1;
r[j] = r[i];
end;
r[i] = tempr;
sort ( r, lo, i-1);
lo = i + 1;
end;
end;
Shellsort:
sort ( r, lo, up )
ArrayToStart r;
int lo, up;
{ int d,i,j;
ArrayEntry tempr;
for ( d = up - lo + 1; d>1;) {
if (d<5) d = 1;
else d = (5*d - 1)/11;
for(i=up-d; i>=lo;i--) {
tempr = r[i];
for ( j=i+d;j<=up && (tempr.k>r[j].k);j+=d )
r[j-d] = r[j];
r[j-d]=tempr;
}
}
}
Heapsort:
procedure sort(var r: ArrayToSort ; lo, up : int)
var i : int;
tempr : ArrayEntry;
begin
for i = (up / 2 ) downto 2 do siftup ( r, i, up);
for i = up downto 2 do begin
siftup ( r, 1, i);
tempr = r[1];
r[1] = r[i];
r[i] = tempr;
end;
procedure siftup ( var r : RecordArray; i,n: int)
var j:int;
tempr: ArrayEntry;
begin
while 2*i<=n do begin
j = 2*i;
if j < n then
if r[j].k < r[j+1].k then j+=1;
if r[i].k < r[j].k then begin
tempr = r [j];
r[j] = r[i];
r[i] = tempr;
i = j;
end;
else i = n + 1;
end;
end;
Linear Probing Sort:
Global variables:
UppBoundr: int
Assert(m+w <= UppBoundr)
m: int
m = Size of interpolation area.
w = desired overflow area.
procedure sort ( var r : ArrayToSort; lo, up : int )
var i,j,uppr : int;
r1: ArrayToSort;
begin
uppr = up + ( UppBoundr - up ) * 3 div 4;
r1 = r;
for j = lo to UppBoundr do r[j].k = NoKey;
for j = lo to up do begin
i = phi ( r1[j].k, lo, uppr);
while r[i].k != NoKey do begin
if r1[j].k < r[i].k then begin
r1[j-1] = r[i];
r[i] = r1[j];
r1[j] = r1[j-1];
end;
i+=1;
if i > UppBoundr then Error
end;
r[i] = r1[j];
end;
i = 0;
for j = lo to UppBoundr do
if r[j].k != NoKey then begin
i += 1;
r[i] = r[j];
end;
for j=i+1 to UppBoundr do r[j].k = NoKey
end;
phi ( key, lo, up )
typekey key;
int lo, up;
{int i;
i = ( key - MinKey ) * ( up - lo + 1 ) / ( MaxKey - MinKey ) + lo;
return ( i > up ? up : i < lo ? lo : i );
};
Merge Sort:
Quick Sort:
COMING SOON
Comments
Post a Comment