算法之选择排序——简单选择排序

今天我们来讲解一下选择排序,先说一种比较简单的简单选择排序吧。

先说简单说一下选择排序:选择排序的基本思想是:每趟从待排序的记录中选出关键字最小的记录,顺序放在已排序的记录序列末尾,直到全部排序结束为止。

简单选择排序的基本流程如下:

从待排序列找到关键字最小的,与第一个交换,然后n-1(第一个元素除外)个依次重复上述步骤。

初始关键字:45   38  66  90  88  10  25  45

第一次选择:10  [38  66  90  88  45  25  45]

第二次选择:10  25  [66  90  88  45  38  45]

第三次选择:10  25  38  [90  88  45  66  45] 

第四次选择:10  25  38   45 [88  90  66  45]

第五次选择:10  25  38   45  45  [90  66  88]

第六次选择:10  25  38   45  45  66  [90  88

第七次选择:10  25  38   45  45  66  88   90

简单选择排序的算法如下:

void SelectSort(List R, int n){  
   int min ,i,j;  
   //每次循环,选择出一个最小键值  
   for (i=1;i<=n-1;i++){  
     min=i;   //假设第i个记录键值最小  
     //循环比较第i个记录与之后的记录  
     for (j=i+1;j<=n;j++){  
        //记录下最小的记录下标  
        if(R[j].key<R[min].key){  
           min=j;  
         }  
        if(min!=j){  
           //将最小键值与第i个记录交换  
           swap(R[min],R[j])  
         }  
  
       }  
   }  
  
} 
简单选择排序是一种不稳定的算法,他的时间复杂度为O(N2),空间复杂度为O(1)。

评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值