T-SQL单向冒泡排序算法

--2004-09-16
--Groundsel
--单向冒泡排序算法:从上到下
Create Procedure sp_Bubble_Sort
 @ID Varchar(8000) --以逗号分隔
As
Create Table #Order
 (ID Int Identity(1,1),Value Int)

Declare @I   Smallint,
 @Len   SmallInt,
 @CharIndex  SmallInt,
 @Value1  SmallInt,
 @Value2  SmallInt,
 @Flag   Bit

 Select @I = 0
 Select @Len = Len(@ID)

 --将字符串转为临时表
 While @I < @Len
 Begin
  Select @CharIndex = CharIndex(',',@ID)
  If @CharIndex <> 0
  Begin
   Insert Into #Order(Value)
    Select Left(@ID,@CharIndex - 1)  
   Select @ID = Right(@ID,Len(@ID) - @CharIndex)
   Select @I = @I + @CharIndex
  End
  Else
  Begin
   Insert Into #Order(Value)
    Select @ID
   Select @I = @Len 
  End
 End

 --@Flag标志排序是否完成
 Set @Flag = 1

 --循环的次数即为排序的趟数 
 While IsNull(@Flag,0) = 1
 Begin
  Set @I = 1
  Set @Flag = 0
  Set @Value1 = Null
  Set @Value2 = Null
 
  Declare MyCur Cursor For Select Value From #Order
  Open MyCur
  Fetch Next From MyCur Into @Value1
 
  While @@Fetch_Status = 0
  Begin
   Select @Value2 = Value From #Order Where ID = @I + 1
   If @Value1 > @Value2
   Begin
    Set @Flag = 1
    Update #Order Set Value = @Value2 Where ID = @I
    Update #Order Set Value = @Value1 Where ID = @I + 1
   End
   Select @I = @I + 1
   Select @Value2 = Null
  
   Fetch Next From MyCur Into @Value1
  End
  Close MyCur
  Deallocate MyCur
 End
 
 Set @I = 0
 Set @ID = ''

 Select @ID = @ID + Cast(Value As Varchar(20)) + ','
  From #Order

 Select Left(@ID,Len(@ID) - 1)
 
Go
Execute sp_Bubble_Sort '23,6,2,12,19,-6'

----------------
-6,2,6,12,19,23

  • 0
    点赞
  • 0
    收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页
评论

打赏作者

Groundsel

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值