选择排序

简介: 选择排序

选择排序

基本思想

每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的
数据元素排完 。

直接选择排序:

在元素集合array[i]--array[n-1]中选择关键码最大(小)的数据元素
若它不是这组元素中的最后一个(第一个)元素,则将它与这组元素中的最后一个(第一个)元素交换
在剩余的array[i]--array[n-2](array[i+1]--array[n-1])集合中,重复上述步骤,直到集合剩余1个元素

选择排序.gif

{
    int tem = *e1;
    *e1 = *e2;
    *e2 = tem;
}

void SelectSort(int* a, int n)
{
    int end = n - 1, begin = 0;
    while (begin < end)
    {
        int maxi = begin, mini =begin;
        for (int i = begin; i < end; i++)
        {
            if (a[maxi] < a[i])
                maxi = i;
            if (a[mini] > a[i])
                mini = i;
        }
        Swap(&a[begin], &a[mini]);
        //maxi在开始位置的时候,要更新maxi
        if (begin == maxi)
            maxi = mini;
        Swap(&a[end], &a[maxi]);
        ++begin;
        --end;
    }
}

直接选择排序的特性总结:

  1. 直接选择排序思考非常好理解,但是效率不是很好。实际中很少使用
  2. 时间复杂度:O(N^2)
  3. 空间复杂度:O(1)
  4. 稳定性:不稳定
相关文章
|
安全 Linux 网络协议
几款Linux系统漏洞扫描、评估工具简介
一、Nmap Nmap 是一种常用工具,可用于判定网络的布局。我们可以在网络上使用 Nmap 来查找主机系统以及打开这些系统的端口。
2664 0
|
9月前
|
机器学习/深度学习 存储 自动驾驶
《深度Q网络:在非平稳环境中破局与进化》
深度Q网络(DQN)在平稳环境中表现出色,但在非平稳环境下面临诸多挑战。例如,自动驾驶和金融市场中的动态变化导致Q值函数失效和数据分布漂移,使DQN难以适应。为此,研究者提出了改进经验回放机制、动态调整学习率和引入多模型融合等策略,以增强DQN的适应性。实际案例表明,这些改进显著提升了DQN在智能交通和工业控制中的表现。未来,进一步优化DQN在非平稳环境下的学习策略仍是关键研究方向。
219 11
|
9月前
|
应用服务中间件 定位技术 网络安全
住宅IP和运营商IP有什么区别?
随着数字化发展,网络安全与隐私保护日益重要,代理IP成为热门选择。住宅IP由ISP分配给家庭用户,通常是动态的,适合日常上网,费用较低,且具有较高隐私保护。运营商IP则分配给企业或数据中心,多为静态,适用于高稳定性和带宽需求的业务,安全性更高但成本也更高。两者在用途、特性和成本上存在显著差异,用户可根据需求选择。
235 1
|
人工智能 TensorFlow 算法框架/工具
《C++与人工智能库的完美邂逅:环境配置全攻略》
本文介绍了如何在C++环境中配置流行的人工智能库,如TensorFlow、PyTorch和OpenCV,涵盖库的选择、环境准备、具体配置步骤及常见问题解决方法,助力开发者高效构建智能化应用。
214 4
|
SQL 存储 API
Flink实践:通过Flink SQL进行SFTP文件的读写操作
虽然 Apache Flink 与 SFTP 之间的直接交互存在一定的限制,但通过一些创造性的方法和技术,我们仍然可以有效地实现对 SFTP 文件的读写操作。这既展现了 Flink 在处理复杂数据场景中的强大能力,也体现了软件工程中常见的问题解决思路——即通过现有工具和一定的间接方法来克服技术障碍。通过这种方式,Flink SQL 成为了处理各种数据源,包括 SFTP 文件,在内的强大工具。
418 15
|
8月前
|
存储 SQL Oracle
|
机器学习/深度学习
斯坦福大学博士在GitHub发布的漫画机器学习小抄,竟斩获129k标星
斯坦福大学数据科学博士Chris Albon在GitHub上发布了一份超火的机器学习漫画小抄,发布仅仅一天就斩获GitHub榜首标星暴涨120k,小编有幸获得了一份并把它翻译成中文版本,今天给大家分享出来!
|
XML 存储 JSON
GitlabCI学习笔记之五:GitLabRunner pipeline语法之artifacts dependencies
GitlabCI学习笔记之五:GitLabRunner pipeline语法之artifacts dependencies
|
JavaScript 前端开发
typeScript基础(8)_ts类型断言
本文介绍了TypeScript中的类型断言,它用于在编译时告诉TypeScript某个对象具有特定的类型,即使它看起来不具备。类型断言可以用来访问一个类型上存在而另一个类型上不存在的属性或方法。需要注意的是,类型断言并不会在运行时改变JavaScript的行为,因此如果断言不当,运行时仍然可能出错。文章还提醒避免将类型断言为`any`类型或进行多重断言。
250 2
|
移动开发 搜索推荐 Android开发
安卓与iOS开发:一场跨平台的技术角逐
在移动开发的广阔舞台上,两大主角——安卓和iOS,持续上演着激烈的技术角逐。本文将深入浅出地探讨这两个平台的开发环境、工具和未来趋势,旨在为开发者揭示跨平台开发的秘密,同时激发读者对技术进步的思考和对未来的期待。