八大排序总结(2)——选择排序(Selection Sort)(c语言实现)

>>>八大排序总结(1)——冒泡排序(Bubble Sort)(c语言实现)<<<

>>>八大排序总结(3)——插入排序(Insertion Sort)(c语言实现)<<<

>>>八大排序总结(4)——快速排序(Quick Sort)(c语言实现)<<<

>>>八大排序总结(5)——归并排序(Merge Sort)(c语言实现)<<<

>>>八大排序总结(6)——希尔排序(Shell Sort)(c语言实现)<<<

>>> 八大排序总结(7)——堆排序(Bubble Sort)(c语言实现)<<<

>>>八大排序总结(8)——线性时间复杂度的排序(桶排序,基数排序,计数排序)【用空间换时间】(c语言实现)<<<

>>>八大排序 时间复杂度,空间复杂度,稳定性的比较<<<


目录

选择排序(Selection Sort)基本思想

原理

时间,空间复杂度与算法稳定性 

代码+分析


选择排序(Selection Sort)基本思想

每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到全部待排序的数据元素排完。


原理

如图所示,有一个有n个数无序序列,第一次将这个无序序列中的最小值1放到最前面,这样1本身就可以看作是一个有序序列。第二次把剩余的无序序列中最小的元素放到有序序列的后面,也就是把2放到1的后面,就这样一直循环,循环n-1轮后,这个序列就是有序的了。


时间,空间复杂度与算法稳定性 

1.时间复杂度:选择排序的复杂度分析。第一次内循环比较N - 1次,然后是N-2次,N-3次,……,最后一次内循环比较1次。共比较的次数是 (N-1)+(N-2)+......+2+1 =N*(N-1)/2 次,所以其时间复杂度为O(N^{2})

虽然选择排序和冒泡排序的时间复杂度一样,但实际上,选择排序进行的交换操作很少,最多会发生 N - 1次交换。而冒泡排序最坏的情况下要发生N^2 /2交换操作。由于交换所需CPU时间比比较所需的CPU时间多,从这个意义上讲,选择排序的性能略优于冒泡排序,而且N的值越小,差别就越明显。

2.空间复杂度:O(1)

3.稳定性:稳定(稳定性的含义可参考https://blog.csdn.net/qq_24016309

选择排序是给每个位置选择当前元素最小的,比如给第一个位置选择最小的,在剩余元素里面给第二个元素选择第二小的,依次类推,直到第n-1个元素,第n个元素不用选择了,因为只剩下它一个最大的元素了。那么,在一趟选择,如果一个元素比当前元素小,而该小的元素又出现在一个和当前元素相等的元素后面,那么交换后稳定性就被破坏了。比较拗口,举个例子,序列5 8 5 2 9,我们知道第一遍选择第1个元素5会和2交换,那么原序列中两个5的相对前后顺序就被破坏了,所以选择排序是一个不稳定的排序算法。


代码+分析

void selection_sort(int arr[],int n)
{
    int i,j,k,temp;
    for (i = 0; i < n - 1; i++)
    {
        k = i;
        for (j = i + 1; j < n; j++)
        {
            if (arr[j] < arr[k])
            {
                k = j;    /*记录最小值下标位置*/
            }
        }
        if (k != i)  /*若最小数所在的下标位置不在位置i则进行交换*/
        {
            temp = arr[k];
            arr[k] = arr[i];
            arr[i] = temp;
        }
    }
}

欢迎大家评论指正,谢谢◕‿◕

  • 18
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值