不稳定的排序-选择排序

前言

选择排序是直观的排序,通过确定一个最大或最小值,再从待排序的的数中找出最大或最小的交换到对应位置。再选择次之。双重循环时间复杂度为 O(n^2)。简单选择排序是不稳定排序。

算法性能

时间复杂度: O(n^2),选择排序比冒泡排序快。
稳定性: 不稳定

代码实现

/*选择排序*/
#include <stdio.h>

void select_sort(int arr[],int n);  //选择排序函数声明

int main()
{
    int i = 0;
    int arr[] = {2,4,6,8,0,1,3,5,7,9};
    int n = sizeof(arr)/sizeof(arr[0]);  //数组元素个数

    select_sort(arr,n);
    //打印排好顺序的数组
    for(i=0;i<n;i++)
    {
        printf("%d  ",arr[i]);
    }
    printf("\n");

    return 0;
}
//选择排序函数定义
void select_sort(int arr[],int n)
{
    int i,j,k,tmp;
    for(i=0;i<n-1;i++)        //n个元素需要排n-1趟
    {
        k = i;               //确定一个最小值的下标
        for(j=i+1;j<n;j++)   //最小的与后面的相比,故j从i+1开始;循环比较到最后一位,故j<n
        {
            if(arr[k]>arr[j]) //若当前的最小值大于后面的
            {
                k = j;       //重新确定最小值的下标
            }
        }
        if(k != i)            //经过一趟排序,K的值发生变化就交换
        {
            tmp = arr[k];
            arr[k] = arr[i];
            arr[i] = tmp;
        }
    }
}


程序运行结果

在这里插入图片描述

答疑解惑

1. 为什么选择排序不稳定呢?
:假设有一个待排序的序列: 2 3 2 1 4
我们知道第一趟排序后就会选择第1个元素2和元素1交换,那么原来序列中两个2的相对顺序就被破坏了,所以选择排序是不稳定的排序算法。

2. 为什么要引入变量k呢?
:变量k的作用是标记最小元素的下标,在出内循环后再交换两个元素的值,这样的好处是一趟排序可能只需要交换一次,运气好的好都不用交换了。这也是为什么选择排序比冒泡排序快。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

⁽⁽ଘ晴空万里ଓ⁾⁾

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值