基础算法
文章平均质量分 53
csdn_dzh
一些点滴的记录
展开
-
算法1——二分法
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。示例 1:输入: [1,3,5,6], 5输出: 2示例 2:输入: [1,3,5,6], 2输出: 1示例 3:输入: [1,3,5,6], 7输出: 4示例 4:输入: [1,3,5,6], 0输出: 0首先是常规方法,时间复杂度为O(n)...原创 2018-10-29 20:10:29 · 230 阅读 · 0 评论 -
排序算法4——图解希尔排序及其实现
基本思想希尔排序对插入排序进行改进,希望通过每次交换间隔一定距离的元素,达到排序效率上的提升基本原理是:将待排序的一组元素按一定的间隔分为若干个序列,分别进行插入排序。开始时设置的间隔比较大,在每轮排序中将间隔逐步减小,直到间隔为1,也就是最后一步是简单插入排序然后,在5间隔排序的基础上,做3间隔排序和1间隔排序(即直接插入排序)可以看到,较小间隔的排序仍然保持着较大间...原创 2018-12-11 14:01:48 · 752 阅读 · 0 评论 -
排序算法——比较与代码汇总,对数器使用
排序算法效率比较不存在绝对意义上最佳的方法,这些排序方法分别适用于不同的条件下排序方法平均时间复杂度最坏情况下时间复杂度额外空间复杂度稳定性简单选择排序O(N2)O(N2)O(1)不稳定冒泡排序O(N2)O(N2)O(1)稳定直接插入排序O(N2)O(N2)O(1)稳定希尔排序O(Nd)O(N2)O(1)不稳定...原创 2018-12-17 12:53:01 · 877 阅读 · 0 评论 -
排序算法10——图解基数排序(次位优先法LSD和主位优先法MSD)
基数排序的概念基数排序是桶排序的一种推广。给定N个记录,每个记录的关键字为一整数,取值范围在0到M之间之前提到的桶排序是在N远大于M的情况下使用的。若如果M比N大很多,这时桶排序就需要M个桶,会造成巨大的控件浪费。而以R为基数对关键字进行分解以后,就只需要R个桶就可以了。例如:对于数字826如果根据基数10来分解,可以得到8、2、6三个关键字,其中8是最主位关键字,6是最次...原创 2018-12-17 12:03:36 · 6044 阅读 · 1 评论 -
排序算法9——图解桶排序及其实现
桶排序使用条件如果已知N个关键字的取值范围在0到M-1之间,而M比N小得多。这个时候就适合用桶排序。举个例子:对全校N个学生统计某一门课的成绩,成绩的范围在0到100之间,这个时候就适合用桶排序。额外的条件是它需要已知关键字的范围,并且关键字在此范围内是可列的,且个数不能超过内存空间承受的限度且N一定是远大于M的桶排序效率高的原因桶排序效率比一般的排序算法高:桶排序将为每...原创 2018-12-16 19:13:22 · 1388 阅读 · 0 评论 -
排序算法3——图解直接插入排序以及折半(二分)插入排序及其实现
一、直接插入的基本思想将待排序的一组序列分为已排好序和未排好序的两个部分初始状态时,已排好序序列仅包含第一个元素,未排好序的序列元素为除去第一个以外的n-1个元素然后,将未排好序序列中的元素逐一插入到已排好序的序列中如此往复,经过n-1次插入后,未排序序列中的元素个数变为0,排序完成。如下图所示代码及上下界如图从代码可以看出,空间复杂度上,简单插入排序仅需要常数个额外空间在...原创 2018-12-10 20:06:05 · 3982 阅读 · 0 评论 -
排序算法2——图解简单选择排序及其实现
基本思想通过n-i次关键字之间的比较,从n-i+1个记录中选出关键字最小的记录,并和第i个记录作交换代码和上下界比较过程如下这样,最多经过n-1次交换,就能完成排序操作下面分析简单选择排序的时间复杂度无论最好或最坏的情况下,其比较次数都是一样多的,第i趟需要进行n-i次关键字的比较,总共需要比较∑(n-i)=n(n-1)/2次,i从1到n-1,而对于交换次数来说,当最...原创 2018-12-10 17:09:29 · 3250 阅读 · 0 评论 -
排序算法8——图解表排序
表排序用于待排元素不是一个简单的整数而已,每一个待排元素都是一个庞大的结构体,包含的元素非常复杂非常多。于是在排序的时候,移动这个结构体的时间是不能忽略不计的。而之前的7种排序算法都需要移动元素,这样移动这些结构体是非常麻烦且耗时的。那么表排序就是在排序的过程中,实际上是不需要移动这些原始数据的,要移动的只是指向它们位置的指针。间接排序:定义一个指针数组作为表(table),注...原创 2018-12-16 12:49:29 · 601 阅读 · 1 评论 -
排序算法1——图解冒泡排序及其实现(三种方法,基于模板及函数指针)
冒泡排序是一种交换排序,基本思想是:两两比较相邻记录的关键字,如果反序则交换,直到没有反序的记录为止一、初级版首先是代码和上下界的确定初级版的思路是:让每一个关键字,都和它后面的每一个关键字作比较,反序就交换。这样,第一位置的关键字在一次循环后一定变成最小值可以看到,初级版的算法存在两个问题:首先,它并不是真正意义上的冒泡排序算法,因为它不是两两相邻做比较的,只是最简单...原创 2018-12-10 15:48:26 · 1550 阅读 · 0 评论 -
排序算法7——图解快速排序(两种主元选择方法)以及CUTOFF时间测试
排序算法1——图解冒泡排序及其实现(三种方法,基于模板及函数指针)排序算法2——图解简单选择排序及其实现排序算法3——图解直接插入排序以及折半(二分)插入排序及其实现排序算法4——图解希尔排序及其实现排序算法5——图解堆排序及其实现排序算法6——图解归并排序及其递归与非递归实现基本思想通过一趟排序将待排记录分割成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,则...原创 2018-12-14 21:19:28 · 3577 阅读 · 1 评论 -
排序算法6——图解归并排序及其递归与非递归实现
基本思想归并排序就是利用归并的思想来实现排序。原理是:假设初始序列有n个记录,则可以看成是n个有序的子序列,每个子序列的长度为1,然后两两归并,得到n/2(+1)个长度为2(或1)的有序的子序列再两两归并……如此重复,知道得到一个长度为n的有序序列为止这种排序方法称为 2路归并排序归并排序递归方法实现下面看递归的实现,思路是先将数组通过mid拆成两半,首先对左边的子序...原创 2018-12-14 14:57:33 · 1549 阅读 · 0 评论 -
排序算法5——图解堆排序及其实现
堆的概念和性质堆,是一种特殊的二叉树,每个子结点的值总是小于(或者大于)它的父结点,相应的分为最大堆和最小堆堆,是一个完全二叉树,一般情况下堆排序都是用数组的方式实现这里可以看到,若以0开始编号大顶堆:arr[i] >= arr[2i+1] &&am原创 2018-12-12 20:43:23 · 1346 阅读 · 0 评论