插入排序
来自 PostgreSQL wiki
跳转到导航跳转到搜索
这是一个非常简单的例子,展示了如何使用递归 CTE 来实现(低效的)插入排序算法,由 我 编写。
with recursive isort(arr, position, sorted_count) as (
select ARRAY[7,3,6,9,0,42,9], 1, 1
union all
select case when position=1 or arr[position]>=arr[position-1] then arr
else arr[1:position-2]||arr[position]||arr[position-1]||arr[position+1:array_length(arr, 1)] end,
case when position=1 or arr[position]>=arr[position-1] then sorted_count+1
else position-1 end,
case when position=1 or arr[position]>=arr[position-1] then 1 else 0 end + sorted_count
from isort
where sorted_count <= array_length(arr,1))
select * from isort;
如果你只需要排序后的数组,可以使用 select arr from isort where sorted_count=array_length(arr,1)+1 而不是 select * from isort。