内排序(二)——选择排序

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/jiangguangchao/article/details/98743967

核心思想

选择排序的核心思想如下:
第 i 趟排序从序列的后n-i+1个元素中选择一个值最小的元素,将其置于该n-i+1个元素的最前面。

通俗点说如下:
每一趟排序从序列中未排好序的元素中选择一个值最小的元素,将其置于这些未排好序的元素的最前面。

选择排序的完整过程图示如下:
在这里插入图片描述

算法实现

选择排序算法的C语言实现如下:

void SELECTSORT(keytype K[ ],int n)
{
    int i, j, d;
    keytype temp;
    for(i=1;i<=n-1;i++){
        d=i;                //寻找值最小的元素,并记录其位置
        for(j=i+1;j<=n;j++)
            if(K[j]<K[d])
               d=j;
        if(d!=i){           // 最小值元素非未排序元素的第一个元素时
           temp=K[d] ;
           K[d]=K[i];
           K[i]=temp;
        }
    }
}

算法分析

Q:若原始序列为一个按值递增的序列,则排序过程中一共要经过多少次元素之间的比较?若原始序列为一个按值递减的序列,则排序过程中要经过多少次元素之间的比较?

A:无论原始序列为什么状态,第i趟排序都需要经过 n-i 次元素之间的比较,因此,整个排序过程中元素之间的比较次数为 n(n-1)/2,其中
在这里插入图片描述

综上,选择排序法的元素之间的比较次数与原始序列中元素的分布状态无关

选择排序的时间复杂度为O(n2),且为非稳定性排序方法

猜你喜欢

转载自blog.csdn.net/jiangguangchao/article/details/98743967