#算法的乐趣

排序算法一:快速排序

快速排序的第一种实现(单指针移动,挖空填数)快速排序由于排序效率在同为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;//可利...

分治算法学习

递去,归来。能够用递归解决的问题需要满足三个条件:原问题可以转换为一个或多个子问题来求解,而这些子问题的求解方法和原问题完全相同,只是规模不同;递归调用次数必须是有限的;必须有结束递归的条件(递归出口)来终止递归。何时使用递归:定义是递归的(斐波那契);数据结构是递归的(二叉树、链表);问题求解的方法是递归的。递归转非...
代码星球 ·2021-01-23

Diffie-Hellman算法简介

一、DH算法是一种密钥交换协议,它可以让双方在不泄漏密钥的情况下协商出一个密钥来。DH算法基于数学原理,比如小明和小红想要协商一个密钥,可以这么做:1.小明先选一个素数和一个底数,例如,素数p=23,底数g=5(底数可以任选),再选择一个秘密整数a=6,计算A=(g^amodp)=8,然后大声告诉小红:p=23,g=5...
代码星球 ·2021-01-23

唯一ID算法之:snowflake(Java版本)

Twitter开源的算法,简单易用。/***Twitter_Snowflake<br>*SnowFlake的结构如下(每部分用-分开):<br>*0-00000000000000000000000000000000000000000-00000-00000-000000000000<br&...
首页上一页...2829303132...下一页尾页