基本思想基数排序过程无须比较关键字,而是通过“分配”和“收集”过程来实现排序。它们的时间复杂度可达到线性阶:O(n)。 实例扑克牌中52张牌,可按花色和面值分成两个字段,其大小关系为: 花色: 梅花< 方块< 红心< 黑心 面值: 2 < 3 < 4 < 5 ...
排序算法 - 归并排序
基本思想归并(Merge)排序法是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,每个子序列是有序的。然后再把有序子序列合并为整体有序序列。 算法步骤 申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列 设定两个指针,最初位置分别为两个已经排序序列的 ...
Java多线程-04之-synchronized关键字
synchronized原理在java中,每一个对象有且仅有一个同步锁。这也意味着,同步锁是依赖于对象而存在。当我们调用某对象的synchronized方法时,就获取了该对象的同步锁。例如,synchronized(obj)就获取了“obj这个对象”的同步锁。不同线程对同步锁的访问是互斥的。也就是说 ...
排序算法 - 奇偶排序
基本思想基本思路是奇数列排一趟序,偶数列排一趟序,再奇数排,再偶数排,直到全部有序。 举个例子:待排数组[6 2 4 1 5 9] 第一次比较奇数列,奇数列与它的邻居偶数列比较,如6和2比,4和1比,5和9比。 [6 2 4 1 5 9] 交换后变成 [2 6 1 4 5 9] 第二次比较偶数列,即 ...
Git学习之~常用命令
git config –global user.name “你的名字” 让你全部的Git仓库绑定你的名字 git config –global user.email “你的邮箱” 让你全部的Git仓库绑定你的邮箱 git init 初始化你的仓库 git add . 把工作区的文件全部提交到 ...
排序算法 - 快速排序
基本思想 1)选择一个基准元素,通常选择第一个元素或者最后一个元素, 2)如果选择第一个元素作为基准元素,则先从右向左找比基准元素小的元素,再从左向右找比基准元素大的元素,交换这两个元素的位置。(如果选择最后一个元素做基准元素,则先从左向右找)直到找到同一位置,跟基准元素位置交换,第一趟排序就结束。 ...
排序算法 - 冒泡排序
基本思想在要排序的一组数中,对当前还未排好序的范围内的全部数,自上而下对相邻的两个数依次进行比较和调整,让较大的数往下沉,较小的往上冒。即:每当两相邻的数比较后发现它们的排序与排序要求相反时,就将它们互换。 算法步骤 比较相邻的元素。如果第一个比第二个大,就交换他们两个。 对每一对相邻元素作同样的工 ...
排序算法 - 堆排序
堆排序是一种树形选择排序,是对直接选择排序的有效改进。 基本思想堆的定义如下:具有n个元素的序列(k1,k2,…,kn),当且仅当满足 时称之为堆。由堆的定义可以看出,堆顶元素(即第一个元素)必为最小项(小顶堆)。 若以一维数组存储一个堆,则堆对应一棵完全二叉树,且所有非叶结点的值均不大于(或不小于 ...
设计模式--单例模式
单例模式介绍** 意图 **:保证一个类仅有一个实例,并提供一个访问它的全局访问点。 ** 主要解决 **:一个全局使用的类频繁地创建与销毁。 ** 何时使用 **:当您想控制实例数目,节省系统资源的时候。 ** 如何解决 **:判断系统是否已经有这个单例,如果有则返回,如果没有则创建。 ** 关键 ...