温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

oracle heap_sort

发布时间:2020-07-22 23:20:42 来源:网络 阅读:216 作者:小牛快跑he 栏目:关系型数据库

CREATE OR REPLACE PACKAGE heap_sort_pkg

AS

  TYPE num_arr_tt IS TABLE OF PLS_INTEGER INDEX BY PLS_INTEGER;

  PROCEDURE add_nums(num_arr_inst IN OUT num_arr_tt, dvalue INT);

  PROCEDURE del_nums(num_arr_inst IN OUT num_arr_tt);

  FUNCTION  get_maxval(num_arr_int IN  OUT num_arr_tt) RETURN INT;

END heap_sort_pkg;



CREATE OR REPLACE PACKAGE BODY heap_sort_pkg

AS

  PROCEDURE add_nums(num_arr_inst IN OUT num_arr_tt, dvalue INT)

  AS

     dest_loc INT := num_arr_inst.count + 1;

     tmp_loc  INT := trunc(dest_loc / 2);

  BEGIN

     WHILE(tmp_loc > 0 AND dvalue > num_arr_inst(tmp_loc)) LOOP

         num_arr_inst(dest_loc) := num_arr_inst(tmp_loc);

         dest_loc := tmp_loc;

         tmp_loc := trunc(dest_loc / 2);

     END LOOP;

     num_arr_inst(dest_loc) := dvalue;

  END add_nums;


  PROCEDURE del_nums(num_arr_inst IN OUT num_arr_tt)

  AS

     lvalue INT;

     rvalue INT;

     umark  INT := 1;

     tmark  INT := umark;

     tvalue INT := num_arr_inst(num_arr_inst.count);

  BEGIN

     IF(num_arr_inst.count <= 1) THEN

        num_arr_inst.delete(1);

        dbms_output.put_line('只有一个值或无值');

        RETURN;

     END IF;

     num_arr_inst.delete(num_arr_inst.count);

     lvalue := umark * 2;

     rvalue := umark * 2 + 1;

     WHILE(umark <= num_arr_inst.count/2) LOOP

         IF(num_arr_inst.exists(lvalue) AND num_arr_inst.exists(rvalue) AND num_arr_inst(lvalue) < num_arr_inst(rvalue)) THEN

             tmark := rvalue;

         ELSE

             tmark := lvalue;

         END IF;

         IF(tvalue < num_arr_inst(tmark)) THEN

             num_arr_inst(umark) := num_arr_inst(tmark);

         ELSE

             EXIT;

         END IF;

         umark := tmark;

         lvalue := umark * 2;

         rvalue := umark * 2 + 1;

     END LOOP;

     num_arr_inst(umark) := tvalue;

  END del_nums;


  FUNCTION get_maxval(num_arr_int IN OUT num_arr_tt) RETURN INT

  AS

      max_value INT := -1;

  BEGIN

      IF(num_arr_int.exists(1)) THEN

        max_value := num_arr_int(1);

        del_nums(num_arr_int);

      END IF;

      RETURN max_value;

  END get_maxval;

END heap_sort_pkg;


向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI