热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

八大经典排序(二)

直接选择排序:在元素集合array[i]–array[n-1]中选择关键码最大(小)的数据元素若它不是这组元素中的最后一个(第一个)元素,则将它与这组元素中的最后一

直接选择排序:

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

void SelectSort(int *parray, int n)
{int begin &#61; 0, end &#61; n - 1;while (begin < end)//数组比较已经到中间位置已经确定了数组最大值最小值{for (int i &#61; begin; i <&#61; end; i&#43;&#43;)//当前数组没有确定的数组元素下标{if (parray[i] > parray[end]){Swap(&parray[i], &parray[end]);}else if (parray[i] < parray[begin]){Swap(&parray[i], &parray[begin]);}}begin&#43;&#43;, end--;//确定后下此数组的下标减少}
}

直接选择排序的特性总结&#xff1a;

  1. 直接选择排序思考非常好理解&#xff0c;但是效率不是很好。实际中很少使用
  2. 时间复杂度&#xff1a;O(N^2)
  3. 空间复杂度&#xff1a;O(1)
  4. 稳定性&#xff1a;不稳定

堆排序

堆排序(Heapsort)是指利用堆积树&#xff08;堆&#xff09;这种数据结构所设计的一种排序算法&#xff0c;它是选择排序的一种。它是通过堆来进行选择数据。需要注意的是排升序要建大堆&#xff0c;排降序建小堆。
在这里插入图片描述
重复继续调整结果为
在这里插入图片描述

实现代码&#xff1a;

void AdjustHeapSort(int *a, int n, int parent)//向下调整算法
{assert(a);int child &#61; parent * 2 &#43; 1;//左孩子int temp &#61; 0;while (child < n){if ((child &#43; 1 < n) && a[child &#43; 1] > a[child])//判断右孩子是否大于左孩子{&#43;&#43;child;}if (a[child]>a[parent])//将大的孩子与父亲交换{Swap(&a[child], &a[parent]);parent &#61; child;child &#61; parent * 2 &#43; 1;}else{break;}}
}void HeapSort(int *a, int n)
{assert(a);//建大堆for (int i &#61; (n - 2) / 2; i >&#61; 0; i--){AdjustHeapSort(a, n, i);}//选数int end &#61; n - 1;while (end>0){Swap(&a[end], &a[0]);AdjustHeapSort(a, end, 0);end--;}
}

直接选择排序的特性总结&#xff1a;

  1. 堆排序使用堆来选数&#xff0c;效率就高了很多。
  2. 时间复杂度&#xff1a;O(N*logN)
  3. 空间复杂度&#xff1a;O(1)
  4. 稳定性&#xff1a;不稳定

冒泡排序

在这里插入图片描述
实现代码&#xff1a;
两两比较相邻记录的关键字&#xff0c;如果反序则交换&#xff0c;直到没有反序的记录为止。冒泡的实现在细节上可以很多种变化&#xff0c;我们就最简单的一种冒泡实现代码&#xff0c;来讲解冒泡排序的思想。

void BubbleSort(int *parray, int n)
{int i &#61; 0, t &#61; 0;int flag &#61; 0;for (i &#61; 0; i < n; i&#43;&#43;){for (t &#61; 1; t < n; t&#43;&#43;){if (parray[t - 1]>parray[t]){int p &#61; 0;p &#61; parray[t];parray[t] &#61; parray[t - 1];parray[t - 1] &#61; p;flag &#61; 1;}}if (flag &#61;&#61; 0){break;}}
}

冒泡排序的特性总结&#xff1a;

  1. 冒泡排序是一种非常容易理解的排序
  2. 时间复杂度&#xff1a;O(N^2)
  3. 空间复杂度&#xff1a;O(1)
  4. 稳定性&#xff1a;稳定

推荐阅读
  • 深入解析十大经典排序算法:动画演示、原理分析与代码实现
    本文深入探讨了十种经典的排序算法,不仅通过动画直观展示了每种算法的运行过程,还详细解析了其背后的原理与机制,并提供了相应的代码实现,帮助读者全面理解和掌握这些算法的核心要点。 ... [详细]
  • Ihavetwomethodsofgeneratingmdistinctrandomnumbersintherange[0..n-1]我有两种方法在范围[0.n-1]中生 ... [详细]
  • 周排行与月排行榜开发总结
    本文详细介绍了如何在PHP中实现周排行和月排行榜的开发,包括数据库设计、数据记录和查询方法。涉及的知识点包括MySQL的GROUP BY、WEEK和MONTH函数。 ... [详细]
  • 自然语言处理(NLP)——LDA模型:对电商购物评论进行情感分析
    目录一、2020数学建模美赛C题简介需求评价内容提供数据二、解题思路三、LDA简介四、代码实现1.数据预处理1.1剔除无用信息1.1.1剔除掉不需要的列1.1.2找出无效评论并剔除 ... [详细]
  • 深入理解二分查找及其应用
    二分查找是一种高效的搜索算法,适用于有序数据集合。其核心思想是通过不断将查找区间缩小一半,直至找到目标元素或区间为空。本文将详细介绍二分查找的基本原理、实现方法以及应用场景的局限性。 ... [详细]
  • 包含phppdoerrorcode的词条 ... [详细]
  • 本文节选自《NLTK基础教程——用NLTK和Python库构建机器学习应用》一书的第1章第1.2节,作者Nitin Hardeniya。本文将带领读者快速了解Python的基础知识,为后续的机器学习应用打下坚实的基础。 ... [详细]
  • 本文总结了《编程珠玑》第12章关于采样问题的算法描述与改进,并提供了详细的编程实践记录。参考了其他博主的总结,链接为:http://blog.csdn.net/neicole/article/details/8518602。 ... [详细]
  • 在数据库事务处理中,InnoDB 存储引擎提供了多种隔离级别,其中 READ COMMITTED 和 REPEATABLE READ 是两个常用的选项。本文详细对比了这两种隔离级别的特点和差异,不仅从理论角度分析了它们对“脏读”和“幻读”的处理方式,还结合实际应用场景探讨了它们在并发控制和性能表现上的不同。特别关注了行锁机制在不同隔离级别下的行为,为开发者选择合适的隔离级别提供了参考。 ... [详细]
  • 揭秘腾讯云CynosDB计算层设计优化背后的不为人知的故事与技术细节
    揭秘腾讯云CynosDB计算层设计优化背后的不为人知的故事与技术细节 ... [详细]
  • C++ 进阶:类的内存布局与虚函数类的实现细节
    C++ 进阶:类的内存布局与虚函数类的实现细节 ... [详细]
  • JVM参数设置与命令行工具详解
    JVM参数配置与命令行工具的深入解析旨在优化系统性能,通过合理设置JVM参数,确保在高吞吐量的前提下,有效减少垃圾回收(GC)的频率,进而降低系统停顿时间,提升服务的稳定性和响应速度。此外,本文还将详细介绍常用的JVM命令行工具,帮助开发者更好地监控和调优JVM运行状态。 ... [详细]
  • 深入解析零拷贝技术(Zerocopy)及其应用优势
    零拷贝技术(Zero-copy)是Netty框架中的一个关键特性,其核心在于减少数据在操作系统内核与用户空间之间的传输次数。通过避免不必要的内存复制操作,零拷贝显著提高了数据传输的效率和性能。本文将深入探讨零拷贝的工作原理及其在实际应用中的优势,包括降低CPU负载、减少内存带宽消耗以及提高系统吞吐量等方面。 ... [详细]
  • 深入理解Spark框架:RDD核心概念与操作详解
    RDD是Spark框架的核心计算模型,全称为弹性分布式数据集(Resilient Distributed Dataset)。本文详细解析了RDD的基本概念、特性及其在Spark中的关键操作,包括创建、转换和行动操作等,帮助读者深入理解Spark的工作原理和优化策略。通过具体示例和代码片段,进一步阐述了如何高效利用RDD进行大数据处理。 ... [详细]
  • 在启用分层编译的情况下,即时编译器(JIT)的触发条件涉及多个因素,包括方法调用频率、代码复杂度和运行时性能数据。本文将详细解析这些条件,并探讨分层编译如何优化JVM的执行效率。 ... [详细]
author-avatar
额哦哦额llo
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有