随笔分类 - 设计模式、算法、数据结构
摘要:【优缺点】 数组:查询方便,但增删难,空间利用率不高 链表:增删简单,空间利用率高,但查询难 哈希表:都挺简单(结合产物) 【不同点】 1、数组空间连续,链表空间发散 2、数组需要预留空间,提前申请,链表不需要,链表需要值和下一个元素的地址 3、数组空间利用率不高,链表比较高,因为是动态申请 4、数
阅读全文
摘要:【Queue】 队列,先进先出,不支持按索引搜寻元素,不支持随便插值,没有实现IList或者ICollection,不支持Add和Remove 语法: Enqueue():在队列的末端添加元素 Dequeue():在队列的头部读取和删除一个元素,注意,这里读取元素的同时也删除了这个元素。如果队列中不
阅读全文
摘要:快速排序是一种非常常见但不容易懂的排序方法。 思路如下: 1、i =L; j = R; 将基准数挖出形成第一个坑a[i]。 2、j--由后向前找比它小的数,找到后挖出此数填前一个坑a[i]中。 3、i++由前向后找比它大的数,找到后也挖出此数填到前一个坑a[j]中 4、再重复执行2,3二步,直到i=
阅读全文
摘要:归并排序思路: 1、将数组进行分组,先将每个分组之内的数进行排序。 2、将几个分组进行合并,形成中级分组,再进行排序 3、将所有中型分组进行合并,再进行排序 也就是 排序--合并--排序--合并--... 代码实现如下: int[] arr = { 1, 9, 2, 6, 3, 2, 5 }; in
阅读全文
摘要:插入排序试用于小数据且基本有序的数组,因为每次插入数据都要遍历比较大小。那么大数据且基本无序的数组呢。 这是需要时用到希尔排序,希尔排序是分组版本的插入排序。 如何分组? 假设又如下数组: {49,38,65,97,76,13,27,49,55,04} 第一次分组,增量一般是一半 那么此时增量是5,
阅读全文
摘要:插入排序思路: 1.默认第一个数已经排好序了,从第二个数开始,向已经排好序的数组里面插入 2.从已排好序的最后一位开始扫描,如果大于要插入的数,则将后面的数整体后移,继续向前扫描,直到不大于或者序号小于0,则插入此处 3.继续下一个数插入,直到所有数都插入到数组中 如何实现整体后移? 实际上是从最后
阅读全文
摘要:选择排序的思路: 1、首选从数组中寻找最小(大)元素,放在数组的起始位置。 2、在从剩余的数中寻找最小(大)元素,放在第二位,以此类推。 这样便起到了筛选的作用,一直以最小或最大的原则进行选择 代码实现 int[] arr = { 1, 9, 2, 4, 6, 7, 3 }; for(int i =
阅读全文
摘要:冒泡排序的方法: 1.比较相邻的两个数,如果后一个数比前一个数大(小),便交换他们的位置 2.比较每一组相邻的两个数的大小,直到最后一组,按照步骤1的规则排序 3.重复以上操作 按照上面的做法,那么排在前面的大数便会慢慢的往后移动,就好像水里的泡泡慢慢往上升一样 值得注意的是,需要循环交换位置,这样
阅读全文
摘要:顾名思义,就是创建对象的时候只产生一个实例。全局共用一个实例。 那么满足这个条件的类必须: 1.不能使用new 新建实例,因为这样就不再是单例。只使用内部方法产生实例并返回 2.确保每次返回的实例都是同一个,也就是说只能在内部new一次 这样很明显就形成了初步的单例模式: /// <summary>
阅读全文