转载 http://duqiangatom.blog.163.com/blog/static/11502518201051181157657/
1、起泡排序法(平均时间复杂)
分析:若是正序,则j=n-1趟排序,每次进行n-j次比较,且不移动记录;
反之,要进行(n-1 + 1 ) * (n-1) /2次;总的时间复杂度为O(n平方)
create or replace function f_bible_sort(p_numbers in varchar2) return varchar2 is
Result varchar2(4000);
type t_table is table of char index by pls_integer;
v_tab t_table;
v_tmp char;
begin
for i in 1 .. nvl(length(p_numbers), 0) loop
v_tab(i) := substr(p_numbers, i, 1);
end loop;
for p in 1 .. nvl(length(p_numbers), 0) - 1 loop
for q in reverse p .. nvl(length(p_numbers), 0)-1 loop ---一定要从冒泡轨迹的起点开始比较。
if v_tab(q) <= v_tab(q+1) then
v_tmp := v_tab(q);
v_tab(q) := v_tab(q+1);
v_tab(q+1) := v_tmp;
end if;
end loop;
end loop;
for i in 1 .. nvl(length(p_numbers), 0) loop
Result := Result || v_tab(i);
end loop;
return(Result);
end f_bible_sort;
2、选择排序法
create or replace function f_choice_sort(p_numbers in varchar2) return varchar2 is
Result varcha