插入排序

来自 PostgreSQL wiki
跳转到导航跳转到搜索

代码片段

Insertion_Sort

适用于 PostgreSQL

8.4+

SQL

依赖于


这是一个非常简单的例子,展示了如何使用递归 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