排序算法
预备役码农
码农预备役大学生,写写博客当笔记用
展开
-
排序算法之归并排序
排序算法之归并排序前言这是分治法的典型案例,也属于牺牲空间换取时间的例子此处使用的是较为经典的二路归并排序原理该算法是先使每个子序列有序,随后合并两个有序子列形成有序全列1、将待排序数组分开成若干子列(一般是不断二分,直至每个子列仅有一个元素)2、将两个子列有序合并,最终合并出有序全列此处为引用时间复杂度分析O(nlogn)C++实现#include <cstring>#include <iostream>typedef bool(*CompareFu原创 2020-09-27 10:22:59 · 204 阅读 · 0 评论 -
排序算法之希尔排序
排序算法之希尔排序前言从此篇开始将介绍较为高级的排序算法,相信大家已经发现,前面的几篇算法的时间复杂度表现并不优秀,下面将介绍时间复杂度表现不错的几种排序算法其中很多用到了分治法的思想,望大家多多体会排序原理官话:1、选定一个增量长,按照增量长h作为数据分组的依据。对数据进行分组2、对分好组的每一组数据完成插入排序3、减小增量长,最小为1,...原创 2020-09-25 09:16:57 · 222 阅读 · 0 评论 -
排序算法之插入排序
排序算法之插入排序前言排序篇第三篇内容排序原理官话:1、把所有元素分为两组,已排序和未排序2、找到未排序的第一个元素,向已排序的组中进行插入操作3、倒序遍历已经排序的元素,并进行比较,直到找到一个元素小于待插入元素(第一个满足此条件的元素),就把待插入元素放到这个位置白话:相当于起扑克牌,并没有进行排序,在你面前有一堆牌需要排序。拿起第一张,第二张进行比较,找到应该在的位置,以此类推完成整个数组的排序工作时间复杂度分析内部同样使用了双层循环,时间复杂度以大O记法记为:O(n^2)C+原创 2020-09-25 08:43:49 · 196 阅读 · 0 评论 -
排序算法之选择排序
排序算法之选择排序前言作为排序算法篇的第二篇内容,在排序算法上进一步深入,讲解更为常用的选择排序排序原理官话:(更加精准,但是比较难懂)1、在每一次的遍历中,都假定第一个索引处的元素为最小值(此处指从小到大排序),和其他索引处的值依次进行比较,若当前索引处的值大于其他某个索引处的值,则假定其他某个索引处的值为最小值,最后可以找到最小值所在的索引2、交换第一个索引处和最小值所在的索引处的值白话:(更加通俗易懂,但是没有那么准确)一共进行n次遍历数组,每一次将尚未判断的最靠前的元素与后面所有的元原创 2020-09-24 22:08:04 · 119 阅读 · 0 评论 -
排序算法之冒泡排序
排序算法之冒泡排序前言作为学习笔记及分享使用,目的在于加深自己的印象。代码若有雷同纯属巧合排序原理1、比较相邻两个元素,依据排序需要调整顺序2、对每一对相邻元素进行比较,最终完成排序时间复杂度分析在最坏情况之下,要对逆序排序进行调整为顺序排序(或者顺序变逆序),比较次数:N^2/2-N/2交换次数:N^2/2-N/2总有效操作次数:N^2-N时间复杂度(大O记法):O(n^2)tip:对于大O记法的相关内容日后补上,优先整理排序相关算法。有时间尽快跟上C++实现#include原创 2020-09-24 21:35:33 · 77 阅读 · 0 评论