--QuickSort
CREATE OR REPLACE PACKAGE exam_PKG IS
procedure recQuickSort(leftvar number,rightvar number);
procedure swap(dex1 number,dex2 number);
function partitionFun(lefthand number,righthand number,pivot number) return number;
type array_type is varray(2000000) of number;
procedure demo;
END exam_PKG;
/
CREATE OR REPLACE PACKAGE BODY exam_PKG IS
arrGlobe array_type := array_type(1,3,5,2,4,6);
pivotPointer number;
partitionPointer number;
temp number;
leftPtr number := 0;
rightPtr number := 0;
flg boolean := true;
procedure recQuickSort(leftvar number,rightvar number)
IS
BEGIN
if exam_PKG.flg then
exam_PKG.arrGlobe.extend(1999994,6);
exam_PKG.flg := false;
end if;
if leftvar <= rightvar then
exam_PKG.pivotPointer := exam_PKG.arrGlobe(rightvar);
exam_PKG.partitionPointer := partitionFun(leftvar,rightvar,exam_PKG.pivotPointer);
exam_PKG.recQuickSort(leftvar,exam_PKG.partitionPointer-1);
exam_PKG.recQuickSort(partitionPointer+1,rightvar);
end if;
END recQuickSort;
procedure swap(dex1 number,dex2 number)
IS
BEGIN
exam_PKG.temp := exam_PKG.arrGlobe(dex1);
exam_PKG.arrGlobe(dex1) := exam_PKG.arrGlobe(dex2);
exam_PKG.arrGlobe(dex2) := exam_PKG.temp;
END swap;
function partitionFun(lefthand number,righthand number, pivot number)
return number is
begin
exam_PKG.leftPtr := lefthand - 1;
exam_PKG.rightPtr := righthand;
loop
loop
exam_PKG.leftPtr := exam_PKG.leftPtr + 1;
exit when exam_PKG.arrGlobe(exam_PKG.leftPtr) >= pivot;
end loop;
loop
exam_PKG.rightPtr := exam_PKG.rightPtr - 1;
exit when exam_PKG.rightPtr <= 1 or exam_PKG.arrGlobe(exam_PKG.rightPtr) <= pivot;
end loop;
if exam_PKG.leftPtr < exam_PKG.rightPtr then
swap(exam_PKG.leftPtr,exam_PKG.rightPtr);
else
exit;
end if;
end loop;
swap(exam_PKG.leftPtr,righthand);
return exam_PKG.leftPtr;
end partitionFun;
procedure demo
is
begin
for i in 1..100 loop
dbms_output.PUT_line(exam_PKG.arrGlobe(i));
end loop;
end;
END exam_PKG;
CREATE OR REPLACE PACKAGE exam_PKG IS
procedure recQuickSort(leftvar number,rightvar number);
procedure swap(dex1 number,dex2 number);
function partitionFun(lefthand number,righthand number,pivot number) return number;
type array_type is varray(2000000) of number;
procedure demo;
END exam_PKG;
/
CREATE OR REPLACE PACKAGE BODY exam_PKG IS
arrGlobe array_type := array_type(1,3,5,2,4,6);
pivotPointer number;
partitionPointer number;
temp number;
leftPtr number := 0;
rightPtr number := 0;
flg boolean := true;
procedure recQuickSort(leftvar number,rightvar number)
IS
BEGIN
if exam_PKG.flg then
exam_PKG.arrGlobe.extend(1999994,6);
exam_PKG.flg := false;
end if;
if leftvar <= rightvar then
exam_PKG.pivotPointer := exam_PKG.arrGlobe(rightvar);
exam_PKG.partitionPointer := partitionFun(leftvar,rightvar,exam_PKG.pivotPointer);
exam_PKG.recQuickSort(leftvar,exam_PKG.partitionPointer-1);
exam_PKG.recQuickSort(partitionPointer+1,rightvar);
end if;
END recQuickSort;
procedure swap(dex1 number,dex2 number)
IS
BEGIN
exam_PKG.temp := exam_PKG.arrGlobe(dex1);
exam_PKG.arrGlobe(dex1) := exam_PKG.arrGlobe(dex2);
exam_PKG.arrGlobe(dex2) := exam_PKG.temp;
END swap;
function partitionFun(lefthand number,righthand number, pivot number)
return number is
begin
exam_PKG.leftPtr := lefthand - 1;
exam_PKG.rightPtr := righthand;
loop
loop
exam_PKG.leftPtr := exam_PKG.leftPtr + 1;
exit when exam_PKG.arrGlobe(exam_PKG.leftPtr) >= pivot;
end loop;
loop
exam_PKG.rightPtr := exam_PKG.rightPtr - 1;
exit when exam_PKG.rightPtr <= 1 or exam_PKG.arrGlobe(exam_PKG.rightPtr) <= pivot;
end loop;
if exam_PKG.leftPtr < exam_PKG.rightPtr then
swap(exam_PKG.leftPtr,exam_PKG.rightPtr);
else
exit;
end if;
end loop;
swap(exam_PKG.leftPtr,righthand);
return exam_PKG.leftPtr;
end partitionFun;
procedure demo
is
begin
for i in 1..100 loop
dbms_output.PUT_line(exam_PKG.arrGlobe(i));
end loop;
end;
END exam_PKG;