Bubble Sort (Ascending)
The PL/SQL code is based on C/C++ code described in [1] and [2]. The line 27 of the code determines the order of sorting (refer output diagram below), > for ascending.DECLARE |
TYPE va_int IS VARRAY(10) OF PLS_INTEGER; |
v_int va_int; |
v_val PLS_INTEGER; |
v_tf PLS_INTEGER := 1; |
v_idx PLS_INTEGER := 0; |
BEGIN |
v_int := va_int(1,12,9,6,3,31,2,7,9); |
DBMS_OUTPUT.PUT('Input Array ['||v_int.COUNT||'] -> ['); |
FOR idx IN v_int.FIRST..v_int.LAST LOOP |
IF idx < v_int.LAST THEN |
DBMS_OUTPUT.PUT(v_int(idx)||', '); |
ELSE |
DBMS_OUTPUT.PUT_LINE(v_int(idx)||']'); |
END IF; |
END LOOP; |
WHILE v_tf = 1 LOOP |
v_tf := 0; |
v_idx := v_idx+1; |
FOR idx IN v_int.FIRST..v_int.LAST LOOP |
IF idx < v_int.COUNT THEN |
IF v_int(idx) > v_int(idx+1) THEN |
v_val := v_int(idx); |
v_int(idx) := v_int(idx+1); |
v_int(idx+1) := v_val; |
v_tf := 1; |
END IF; |
END IF; |
END LOOP; |
END LOOP; |
DBMS_OUTPUT.PUT_LINE(' Ascending Sort Iterations -> '||v_idx); |
DBMS_OUTPUT.PUT('Sorted Array ['||v_int.COUNT||'] -> ['); |
FOR idx IN v_int.FIRST..v_int.LAST LOOP |
IF idx < v_int.LAST THEN |
DBMS_OUTPUT.PUT(v_int(idx)||', '); |
ELSE |
DBMS_OUTPUT.PUT_LINE(v_int(idx)||']'); |
END IF; |
END LOOP; |
END; |
/ |
Bubble Sort (Descending)
The line 27 of the code determines the order of sorting (refer output diagram below), < for descending.DECLARE |
TYPE va_int IS VARRAY(10) OF PLS_INTEGER; |
v_int va_int; |
v_val PLS_INTEGER; |
v_tf PLS_INTEGER := 1; |
v_idx PLS_INTEGER := 0; |
BEGIN |
v_int := va_int(1,12,9,6,3,31,2,7,9); |
DBMS_OUTPUT.PUT('Input Array ['||v_int.COUNT||'] -> ['); |
FOR idx IN v_int.FIRST..v_int.LAST LOOP |
IF idx < v_int.LAST THEN |
DBMS_OUTPUT.PUT(v_int(idx)||', '); |
ELSE |
DBMS_OUTPUT.PUT_LINE(v_int(idx)||']'); |
END IF; |
END LOOP; |
WHILE v_tf = 1 LOOP |
v_tf := 0; |
v_idx := v_idx+1; |
FOR idx IN v_int.FIRST..v_int.LAST LOOP |
IF idx < v_int.COUNT THEN |
IF v_int(idx) < v_int(idx+1) THEN |
v_val := v_int(idx); |
v_int(idx) := v_int(idx+1); |
v_int(idx+1) := v_val; |
v_tf := 1; |
END IF; |
END IF; |
END LOOP; |
END LOOP; |
DBMS_OUTPUT.PUT_LINE(' Descending Sort Iteration -> '||v_idx); |
DBMS_OUTPUT.PUT('Sorted Array ['||v_int.COUNT||'] -> ['); |
FOR idx IN v_int.FIRST..v_int.LAST LOOP |
IF idx < v_int.LAST THEN |
DBMS_OUTPUT.PUT(v_int(idx)||', '); |
ELSE |
DBMS_OUTPUT.PUT_LINE(v_int(idx)||']'); |
END IF; |
END LOOP; |
END; |
/ |
Reference Information
1. Robert Lafore, Object Oriented Programming in C++, Fourth Edition, 2001
74063