
数据结构与算法
icegarlic。
这个作者很懒,什么都没留下…
展开
-
排序之选择排序 Java实现
算法: 首先,找到数组中最小的那个元素,其次,将它和数组的第一个元素交换位置(如果第一个元素就是最小元素那么它就和自己交换)。然后,在剩下的元素中找到最小的元素,将它与数组的第二个元素交换位置,如此往复,直到整个数组排序。对于长度为的数组,选择排序需要大约/2次比较和次交换。选择排序有两个特点:1、运行时间和输入无关。一个有序数组或者主键全部相同的数组和一个元素随机排列的...原创 2019-04-11 23:09:10 · 146 阅读 · 0 评论 -
排序之插入排序 Java实现
算法:在计算机的实现中,为了给要插入的元素腾出空间,我们需要将其余所有元素在插入之前都向右移动一位。对于一个很大且其中的元素已经有序(或接近有序)的数组进行排序将会比对随机顺序的数组或是逆序数组进行排序要快得多。对于随机排列的长度为N且主键不重复的数组,平均情况下插入排序需要~/4次比较以及~/4次交换。最坏的情况下需要~/2次比较和~/2次交换,最好情况下需要N-1次比较和0次比较。...原创 2019-05-08 17:13:29 · 177 阅读 · 0 评论 -
排序之希尔排序 Java实现
算法:一个 h 有序数组就是 h 个互相独立的有序数组编织在一起组成的一个数组。在进行排序是,如果 h很大,我们就能将元素移动到很远的地方,为实现更小的 h 有序创造方便。用这种方式,对任意以1结尾的h序列,我们都能讲数组排序。实现:使用序列 1/2(-1),从 N/3 开始递减至 1 。这个序列被称为递增序列。实现希尔排序的一种方法是对于每个h,用插入排序将h 个子数组独立排序。...原创 2019-05-23 22:46:46 · 123 阅读 · 0 评论 -
n&(n-1)的运用
先来看个题:输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。先上代码: public int NumberOf1(int n) { int count = 0; while (n!=0) { count++; n = n & (n - 1); } ...原创 2019-06-05 22:00:21 · 1757 阅读 · 1 评论 -
几种排序算法的性能特点
算法 是否稳定 是否为原地排序 时间复杂度 空间复杂度 选择排序 否 是 1 插入排序 是 是 1 希尔排序 否 是 1 快速排序 否 是 归并排序 是 否 N 堆排序 否 是 1 ...原创 2019-06-12 18:52:32 · 131 阅读 · 0 评论 -
排序之冒泡排序 Java实现
思想:从左到右不断交换相邻逆序的元素,在一轮的循环之后,可以让未排序的最大元素上浮到右侧。在一轮循环中,如果没有发生交换,那么说明数组已经是有序的,此时可以直接退出。实现:public class Bubble<T extends Comparable<T>> extends Sort<T> { @Override pub...原创 2019-09-09 17:14:50 · 159 阅读 · 0 评论