
Algorithm
熊叫大雄
雁归时,佳期如梦。
展开
-
排序之冒泡排序
冒泡排序应该是我接触的第一排序算法吧,初学C语言的时候就学了冒泡排序算法,现在做一下简单的记录。 冒泡排序的核心思想就是两两比较相邻元素来调整元素位置,是稳定排序,平均时间复杂度为,n为要排序的元素的个数,简单图示如下: 此处省略其他步骤... 冒泡排序算法的简单实现: intbubbleSort(int*pArray,intlen) { if(NULL...原创 2019-09-05 20:11:40 · 120 阅读 · 0 评论 -
排序之简单选择排序
基本思想:每次都从剩下的记录中选出关键字最大或者最小的来排序。 简单选择排序是不稳定排序,平均时间复杂度:,可以这样理解,就是最差的情况我们要对比多少次才能得到最终的排序,一共是: 然后需要平移的次数最差是n次,所以,时间复杂度为: 图示: C++程序: intsimpleSelect(int*pArray,intlen) { if(NULL==pArray...原创 2019-09-06 23:22:11 · 388 阅读 · 0 评论 -
排序之希尔排序
希尔排序,因D.L.Shell于1959年提出而得名,核心思想:按照一定增量d,对比第i位元素和第i+d位元素。 希尔排序应该算是在插入排序的基础上开发出来的排序算法。 希尔排序是不稳定排序,时间复杂度为:希尔排序的时间复杂度是与选取的增量有关的,当选取的增量为1的时候,希尔排序就是插入排序时间复杂度为:;而Hibbard增量{1, 3, ..., 2^k-1}的希尔排序时间复杂度为:。 图...原创 2019-09-08 11:51:10 · 190 阅读 · 0 评论 -
排序之插入排序
插入排序或者叫直接插入排序,简单粗暴,核心思想就是:不管选最大还是最小,每次都把没有排序的元素插入到已经排序的元素中间的合适的位置上。所以直接插入排序是把为排序的元素与排好序的元素逐一对比,直到处于排好序的元素中间。 直接插入排序是稳定排序,时间复杂度为:。 图示: C++代码实现: intinsertSort(int*pArray,intlen) { if...原创 2019-09-07 11:28:23 · 153 阅读 · 0 评论 -
排序之归并排序
归并排序的思想是,将小的有序数组归并为一个大的有序数组,也就是对于一个数组,将其不管拆分为小的数组进行排序,然后将排好序的小数组再归并为稍大的数组,再将稍大的数组归并为原来的数组。 归并排序的是稳定排序,其时间复杂度为 归并的时候要判断三个条件: 1、当左半边数组用尽的时候要取右半边的数组; 2、当右半边数组用尽的时候要取左半边的数组; 3、如果未用尽,右边当前的元素与左边当前的元素作比...原创 2019-09-09 15:23:50 · 210 阅读 · 0 评论 -
基于Qt5的排序算法简单可视化
之前写了几个排序算法,然后看到别人将排序算法的过程可视化出来,所以就想尝试一下,然后就用Qt简单写了个界面,用QImage和QPainter来画图显示,代码比较简单。 我的想法是画图的时候,图像的X轴对应数组的,然后画垂直线,线的高度就是数组元素值的大小。首先需要一个画整个数组的函数,这个函数要将数组整个画到图像上,背景取黑色,然后线取绿色,为了可视化,将图像的大小设置为宽度数组的元素个数乘以1...原创 2019-09-08 21:16:14 · 1931 阅读 · 11 评论 -
排序之快速排序
快速排序,从名字来看就够藐视一切了,不过经过测试,快速排序还是比较对得起这个名字的,速度还是比较快的,不过快速排序依然是一个不稳定排序,其平均时间复杂度为NlogN。 快速排序的基本思想是在一个数组中找一个元素为参考值,将大于它的元素放在一边,然后将小于它的元素放在另一边,这样其实就得到两个子数组,然后对子数组再分别找一个参考点,大于参考点的放在一边,小于的放在另一边,如此循环下去,所以在做的时...原创 2019-09-08 11:51:44 · 135 阅读 · 0 评论