选择排序 Selection Sort

选择排序的基本思想是:对待排序的记录序列进行n-1遍的处理,第1遍处理是将L[1..n]中最小者与L[1]交换位置,第2遍处理是将L[2..n]中最小者与L[2]交换位置,......,第i遍处理是将L[i..n]中最小者与L[i]交换位置。这样,经过i遍处理之后,前i个记录的位置就已经按从小到大的顺序排列好了。
  当然,实际操作时,也可以根据需要,通过从待排序的记录中选择最大者与其首记录交换位置,按从大到小的顺序进行排序处理。

选择排序算法可实现如下:

procedure Selection_Sort(var L:List);
var
i,j,s:position;
begin
 for i:=First(L) to Last(L)-1 do
    begin
	s:=i;
	for j:=i+1 to Last(L) do
	  if L[j]< L[s] then s:=j; //记录L[i..n]中最小元素的位置
	swap(L[i],L[s]);           //交换L[i],L[s]
    end;  
end;

算法Selection_Sort中里面的一个for循环需要进行n-i次比较,所以整个算法需要

次比较,显而易见,算法Selection_Sort中共调用了n-1次swap过程,即进行了n-1次交换。因而,算法Selection_Sort的时间复杂性f(n)=O(n 2)。

[参考算法]:Pascal语言表述的选择排序算法

procedure sort;
   var i,j,k:integer;
   begin
     for i:=1 to n-1 do begin
       k:=i;
       for j:=i+1 to n do
       if a[j]< a[k] then k:=j; 
       {找出a[I]..a[n]中最小的数与a[I]作交换}
       if k< >i then begin
         a[0]:=a[k];a[k]:=a[i];a[i]:=a[0];
       end;
     end;
   end; 



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值