#数据结构与算法

排序算法小结

排序算法经过了很长时间的演变,产生了很多种不同的方法。对于初学者来说,对它们进行整理便于理解记忆显得很重要。每种算法都有它特定的使用场合,很难通用。因此,我们很有必要对所有常见的排序算法进行归纳。    我不喜欢死记硬背,我更偏向于弄清来龙去脉,理解性地记忆。比如下面这张图,我们...
代码星球 代码星球·2021-01-24

8-4.桶排序算法详解

1.桶排序介绍桶排序(Bucketsort)是一种基于计数的排序算法,工作的原理是将数据分到有限数量的桶子里,然后每个桶再分别排序(有可能再使用别的排序算法或是以递回方式继续使用桶排序进行排序)。当要被排序的数据内的数值是均匀分配的时候,桶排序时间复杂度为Θ(n)。桶排序不同于快速排序,并不是比较排序,不受到时间复杂度...
代码星球 代码星球·2021-01-24

4-2.矩阵乘法的Strassen算法详解

题目描述   请编程实现矩阵乘法,并考虑当矩阵规模较大时的优化方法。思路分析   根据wikipedia上的介绍:两个矩阵的乘法仅当第一个矩阵B的列数和另一个矩阵A的行数相等时才能定义。如A是m×n矩阵和B是n×p矩阵,它们的乘积AB是一个m×p矩阵,它的一个...

排序算法一:快速排序

快速排序的第一种实现(单指针移动,挖空填数)快速排序由于排序效率在同为O(N*logN)的几种排序方法中效率较高,因此经常被采用,再加上快速排序思想----分治法也确实实用,因此很多软件公司的笔试面试,包括像腾讯,微软等知名IT公司都喜欢考这个,还有大大小的程序方面的考试如软考,考研中也常常出现快速排序的身影。总的说来...
代码星球 代码星球·2021-01-24

三路快速排序算法

1、三路快速排序算法的基本思想之前的快速排序算法都是将序列分成<=v和>v或者是<v和>=v的两个部分,而三路快速排序是将序列分成三个部分:<v、=v、>v,如下图所示:  首先v元素还是作为"基准"元素,e表示当前遍历索引值指向的元素,也就是待考虑的元素,从图中...
代码星球 代码星球·2021-01-24

自底向上的归并排序算法

1、什么是自底向上的归并排序?说到底,不管是前面说的自顶向下的归并排序还是现在讲的自底向上的归并排序,其实质都是归并。来看看一个演示过程: 这个就是待排序的数组序列  先将数组序列以2个元素为一组分成4组,每个组内部分成2个子序列进行向上合并  这是合并之后的效果&nb...

归并排序算法

1、什么是归并排序?归并排序是利用递归和分而治之的技术将数据序列划分成为越来越小的序列,将两个(或两个以上)有序子序列合并成一个新的有序序列,即把待排序序列分为若干个子序列,每个子序列是有序的,然后再把有序子序列合并为一个新的有序序列,最终将整个序列变得有序。时间复杂度:O(nlogn) 2、效果演示&nbs...
代码星球 代码星球·2021-01-24

插入排序之直接插入排序算法

1、什么是插入排序它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。从第二个元素开始r[1],那么将他左边的元素作为一个已经有序的序列,将r[1]按从小到大的顺序插入到有序序列中的合适位置使之成为一个新的有序序列;接着将r[2]插入到左边的有序序列中,使之成为一个新的有序序...
代码星球 代码星球·2021-01-24

选择排序之简单选择排序算法

1、什么是选择排序?选择排序(Selectionsort)是一种简单直观的排序算法。它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。 选择排序是不稳定的排序方法(比如序列[5,5,3]第一次就将第一个[5]与[3]交换,导致第一个5挪动...
代码星球 代码星球·2021-01-24

八大数据结构常见面试算法

八大数据结构分别是:数组,队列,栈,图,链表,树,哈希表,字典树摘自:https://baijiahao.baidu.com/s?id=1609200503642486098&wfr=spider&for=pc1.数组  ①寻找数组中第二小的元素  方法一:由小到大排序,然后取第二个元素  方法二:遍历...

Java常用排序算法

在排序过程中,全部记录存放在内存,则称为内排序,如果排序过程中需要使用外存,则称为外排序。一般来说外排序分为两个步骤:预处理和合并排序。首先,根据可用内存的大小,将外存上含有n个纪录的文件分成若干长度为t的子文件(或段);其次,利用内部排序的方法,对每个子文件的t个纪录进行内部排序。这些经过排序的子文件(段)通常称为顺...
代码星球 代码星球·2021-01-23

40道Java初中级算法面试题

【程序1】  题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第四个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 1.程序分析:  兔子的规律为数列1,1,2,3,5,8,13,21.... 123456789...
代码星球 代码星球·2021-01-23

一种简易的表达式求值算法

在算法书上看到了Dijkstra的表达式求值算法,不断地将括号包围的子表达式替换为一个数值,最终就可以求得结果。相比于转换成后缀表达式的算法,该算法很简洁,但限制却十分地大:必须将所有expropexpr用括号括起来,如:(1+((2+3)+(4*5)))。Dijkstra算法(PS:下面的实现中,每次读到的字符串s是...

C语言实现银行家算法

  #include<stdio.h>#include<stdlib.h>#include<string.h>#include<stdbool.h>//bool类型intN=0;//进程数目intM=0;//资源数目int*Available;//可利...

一种很有意思的数据结构:Bitmap

昨晚遇到了一种很有意思的数据结构,Bitmap。Bitmap,准确来说是基于位的映射。其中每个元素均为布尔型(0or1),初始均为false(0)。位图可以动态地表示由一组无符号整数构成的集合。每个bit对应一个无符号数。如位图第10个比特为true(1),表示无符号整数9。之所以用位图来表示整数,是为了节省内存。假如...
首页上一页...3536373839...下一页尾页