概述 本文中主要讲解一些常见排序算法,分别是冒泡排序,插入排序,选择排序,希尔排序,归并排序,快速排序,堆排序,计数排序 常见排序算法可以分为两大类: 非线性时间比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此称为非线性时间比较类排序。 线性时间非比较类排序 ...
分类:
编程语言 时间:
2020-06-17 13:03:11
阅读次数:
69
<?php #基数排序,此处仅对正整数进行排序,至于负数和浮点数,需要用到补码,各位有兴趣自行研究 #计数排序 #@param $arr 待排序数组 #@param $digit_num 根据第几位数进行排序 function counting_sort(&$arr, $digit_num = fa ...
分类:
编程语言 时间:
2020-06-16 23:31:04
阅读次数:
80
这三种排序算法分别是桶排序、计数排序和基数排序,之所以它们的时间复杂度能到达O(n),是因为它们都是非基于比较的排序算法,不涉及元素之间的比较操作。 1 桶排序 1.1 原理 将待排数据元素分配到几个有序的桶中,然后对每个桶中的数据元素分别进行排序,每个桶中的数据元素有序后按桶的顺序将数据元素依次取 ...
分类:
编程语言 时间:
2020-06-16 20:03:08
阅读次数:
101
排序算法提多了,很多甚至连名字你都没听过,比如猴子排序、睡眠排序等。最常用的:冒泡排序、选择排序、插入排序、归并排序、快速排序、计数排序、基数排序、桶排序。根据时间复杂度,我们分三类来学习,今天要讲的就是冒泡、插入、选择排序算法。排序算法时
分类:
编程语言 时间:
2020-06-05 00:58:45
阅读次数:
68
关注公号「码哥字节」修炼技术内功心法,完整代码可跳转GitHub:https://github.com/UniqueDong/algorithms.git摘要:排序算法提多了,很多甚至连名字你都没听过,比如猴子排序、睡眠排序等。最常用的:冒泡排序、选择排序、插入排序、归并排序、快速排序、计数排序、基数排序、桶排序。根据时间复杂度,我们分三类来学习,今天要讲的就是冒泡、插入、选择排序算法。排序算法时
分类:
编程语言 时间:
2020-06-05 00:28:49
阅读次数:
72
#include<stdio.h> #include<stdlib.h> void print_arr(int arr[],int N) { int i; for(i=0;i<N;i++) { printf("%d ",arr[i]); } } void radix_sort(int A[],int ...
分类:
编程语言 时间:
2020-06-03 17:36:42
阅读次数:
76
初始计数排序 摘自漫画算法: 计数排序是一种不基于元素比较,利用数组索引来确定元素的正确位置的。 假设数组中有20个随机整数,取值范围0~10,要求用最快的速度把这20个整数从小到大进行排序。 如何给这些无序的随机整数进行排序呢? 考虑到这些整数只能够在0、1、2、3、4、5、6、7、8、9、10这 ...
分类:
编程语言 时间:
2020-05-31 13:01:57
阅读次数:
77
计数排序 排序思想: 对于数组 a[ ] 排序 ,先用数组c[ a[ i ] ] 记录其中的值出现的次数,然后计算前缀和;得出的值的意义就是 对于c[ a[i] ] 的值就是 对于所有的 a[ i ] 最后一个 a[ i ] 在数组中有序的排名,所以借助 ans[ ] 数组记录下标c[a[i] ] ...
分类:
编程语言 时间:
2020-05-16 12:49:20
阅读次数:
63
1.汉诺塔算法 实现这个算法可以简单分为三个步骤: (1) 把n-1个盘子由A 移到 B; (2) 把第n个盘子由 A移到 C; (3) 把n-1个盘子由B 移到 C;从这里入手,在加上上面数学问题解法的分析,我们不难发现,移到的步数必定为奇数步: (1)中间的一步是把最大的一个盘子由A移到C上去; ...
分类:
编程语言 时间:
2020-05-14 22:37:40
阅读次数:
100