JavaScript常见排序以下两个函数是排序中会用到的通用函数,就不一一写了function checkArray(array) {if (!array || array.length <= 2) return
}
function swap(array, left, right) {let rightValue = array[right]array[right] = array[left]array[left] = rightValue
}View Code冒泡排序冒泡排序的原理如下,从第一个元素开始,把当前元素和下一个索引元素进行比较。如果当前元素大,那么就交换位置,重复操作直到比较到最后一...
算法:算法是解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列,并且每条指令表示一个或多个操作。为什么把数据结构和算法一起说?
想想罗密欧与朱丽叶,梁山伯和祝英台,少了一个你总会觉得奇怪吧。算法的五个基本特性:输入:有0个或多个输入;输出:有1个或多个输出;有穷性:步骤有限,不能无穷循环下去;确定性:有确定的含义,不能出现二义性;可行性:每一步都能通过有限次数完成。算法设计的要求:正确性:能...
最近在读《数据结构、算法与应用》这本书,把书上的习题总结一下,用自己的方法来实现了这些题,可能在效率,编码等方面存在着很多的问题,也可能是错误的实现,如果大家在看这本书的时候有更优更好的方法来实现,还请大家多多留言交流多多指正,谢谢7. 假定用一维数组a[0 : size-1]来存储一组元素。如果有n个元素,可以把它们存储在a[0],..., a[n-1]中。当n超过si ze时, 数组将不足以存储所有元素 , 必须分配一个更大的数组。类似地...
1)最长不重复子串使用string和vector<string>string FindLongestNonRepeatSubstring(string str)
{if (str.empty()) return"";string tmp;//存放临时不重复的子串vector<string> svec;//存放所有不重复的子串int start = 0;//标记每次开始查找子串的下标int pos = -1; //查找当前字符在子串中的位置下标tmp.push_back(str[0]);for (unsigned int i = 1; i < str.size(); ++i){pos = tmp.find(str[i]);if (pos == -1){tmp.push_bac...
桶排序是计数排序的升级版。它利用了函数的映射关系,高效与否的关键就在于这个映射函数的确定。为了使桶排序更加高效,我们需要做到这两点:在额外空间充足的情况下,尽量增大桶的数量
使用的映射函数能够将输入的 N 个数据均匀的分配到 K 个桶中
同时,对于桶中元素的排序,选择何种比较排序算法对于性能的影响至关重要。
什么时候最快
当输入的数据可以均匀的分配到每一个桶中。
什么时候最慢
当输入的数据被分配到了同一个桶中...
本文根据《大话数据结构》一书,实现了Java版的二叉排序树/二叉搜索树。二叉排序树介绍在上篇博客中,顺序表的插入和删除效率还可以,但查找效率很低;而有序线性表中,可以使用折半、插值、斐波那契等查找方法来实现,但因为要保持有序,其插入和删除操作很耗费时间。二叉排序树(Binary Sort Tree),又称为二叉搜索树,则可以在高效率的查找下,同时保持插入和删除操作也又较高的效率。下图为典型的二叉排序树。二叉查找树具有以下...
数组,都懂的,直接看代码吧,实现以下功能:创建数组查找在索引上的值查找数组中是否含有值删除在索引上的值添加一个值查找一个值在数组的位置public class ArrayStructures {private int[] theArray = new int[50];private int arraySize = 10;public void generateRandomArray(){for (int i =0; i< arraySize;i++){theArray[i] = (int)(Math.random()*10 + 10);}}public void printArray(){StringBuffer sb = new StringBuffer(...
字典我们翻阅书籍时,很多时候都要查找目录,然后定位到我们要的页数,比如我们查找某个英文单词时,会从英语字典里查看单词表目录,然后定位到词的那一页。计算机中,也有这种需求。一、字典字典是存储键值对的数据结构,把一个键和一个值映射起来,一一映射,键不能重复。在某些教程中,这种结构可能称为符号表,关联数组或映射。我们暂且称它为字典,较好理解。如:键=>值"cat"=>2
"dog"=>1
"hen"=>3我们拿出键cat的值,就是2了...
一 存储结构 static class Node<K,V> implements Map.Entry<K,V> { final int hash; final K key; V value; Node<K,V> next;}transient Node<K,V>[] table;内部存储的单元如上所示,整体上就是数组加链表的桶状结构。二 put操作put(key,value)内部调用的是putVal() 下面是源码 jdk1.8采用的是尾插法 final V putVal(int hash, K key, V value, boolean onlyIfAbsent,boolean evict) {Node<K,V>[] tab; Node<K,V...
大学刚学编程的时候,有一句很经典的话程序=数据结构+算法今天有了进一步认识。场景:1、当前局面(1)有现成的封装好的分页组件 返回结果是page。类型为:Page。包括 page 分页信息,data 数据列表 List型。(2)查询了一个数据列表 midResult。类型为 List<Map<String,Object>> 。2、想要的结果 现在想把page midResult 两个结果集进行处理。返回页面。3、解决问题 首先纠结的是,用哪种类型来存储数据。用List 还是Map<St...
基本准备: function CArray(numElems) {this.dataStore = [];this.pos = 0;this.numElems = numElems;this.insert = insert;this.toString = toString;this.clear = clear;this.setData = setData;this.swap =swap;for(var i = 0; i < numElems; ++i) {this.dataStore[i] = i;}}function setData() {for(var i = 0; i < this.numElems; ++i) {this.dataStore[i] = Math.floor(Math.random() * 100);//0-99}}function clear() {...
声明:虽然本系列博客与具体的编程语言无关。但是本文作者对c++相对比较熟悉,其次是java,所以难免会有视角上的偏差。举例也大多是和这两门语言相关。今天先来看看有哪些常见的数据结构(C++ STL视角,其他应该也大同小异吧。哈哈,我猜的!)。所以之后的内容大多从STL出发,然后顺便对比下java中对应的数据结构。作为一名合格的软件开发人员,我们有时不需要深入对这些结构进行深度了解(原子级了解),但是至少我们得知道这些结构...
串(string)是由零个或多个宇符组成的有限序列,又名叫字符串。定义的解释:
??串中的字符数目n称为串的长度,定义中谈到“有限”是指长度n是一个有限的数值。
??零个字符的串称为空串(null string),它的长度为零,可以直接用两双引号一表示,也可以用希腊Φ字母来表示。
??所谓的序列,说明串的相邻字符之间具有前驱和后继的关系。下面是串的一些概念性东西:??空格串,是只包含空格的串。注意它与空串的区别,空格串是有内...
#include<iostream>
#include<queue>
#include<stack>
using namespace std;#define INFINITY DBL_MAX //无穷大
#define MAX_VERTEX_NUM 20 //最大顶点个数
enum GraphKind //图的类型
{DG,DN,UDG,UDN//有向图、有向网、无向图、无向网
};//弧结构
typedef struct ArcCell
{double adj;//权值,无权图用1表示
}AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM];
//邻接矩阵图结构struct MGraph
{int vexs[MAX_VERTEX_NUM];//顶点集合...
不相交集合 故名思意就是一种含有多个不相交集合的数据结构。典型的应用是确定无向图中连通子图的个数。其基本操作包括:Make-Set(x):建立一个新的集合,集合的成员是x;Union(x,y): 将包含x和y的集合合并为一个集合;Find-Set(x): 返回指向包含x的集合的指针;下面是一个例子,(a)是一个无向图,(b)是使用不相交集合来找连通子图的个数。做法是初始为各个顶点为一个集合,然后遍历各个边,把边的端点的集合进行合并,当处理完所有...