简单选择排序

 

简单选择排序(Simple Selection Sort ,又称为直接选择排序)的基本操作是:通过n-i次关键字间的比较,从n-i+1个记录中选取关键字最小的记录,然后和第i个记录进行交换,i=1, 2, … n-1 。

1  排序示例

       例:设有关键字序列为:7, 4, -2, 19, 13, 6,直接选择排序的过程如下图10-8所示。

 

2  算法实现

void simple_selection_sort(Sqlist *L)

         int m, n , k;

         for (m=1; m<L->length; m++)

         { 

                   k=m ;

                   for  (n=m+1; n<=L->length; n++)

               if  ( LT(L->R[n].key, L->R[k].key) )  k=n ;

                   if  (k!=m)      /*   记录交换   */

               { 

                            L->R[0]=L->R[m];

                            L->R[m]=L->R[k];

                    L->R[k]=L->R[0];

              }

         }

}

时间复杂度是:T(n)=O(n2)

空间复杂度是:S(n)=O(1)

从排序的稳定性来看,直接选择排序是不稳定的。

 

树形选择排序

首先对n个记录的关键字两两进行比较,选取én/2ù个较小者;然后这én/2ù个较小者两两进行比较,选取én/4ù个较小者… 如此重复,直到只剩1个关键字为止。

该过程可用一棵有n个叶子结点的完全二叉树表示,如图10-9所示。

每个枝结点的关键字都等于其左、右孩子结点中较小的关键字,根结点的关键字就是最小的关键字。

输出最小关键字后,根据关系的可传递性,欲选取次小关键字,只需将叶子结点中的最小关键字改为“最大值” ,然后重复上述步骤即可。

含有n个叶子结点的完全二叉树的深度为é㏒2nù+1,则总的时间复杂度为O(n㏒2n) 。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值