Dolphin的博客


  • 首页

  • 分类

  • 关于

  • 归档

  • 标签

  • Sitemap

  • 搜索
close
Dolphin的博客

算法

发表于 2016-12-14 | 分类于 Programming |

汉诺塔算法

1
2
3
4
5
6
7
8
9
10
11
12
13
static void hannoi(int n, String from, String buffer, String to) {
if (n == 1) {
System.out.println("Move disk " + n + " from " + from + " to " + to);
} else {
hannoi(n - 1, from, to, buffer);
System.out.println("Move disk " + n + " from " + from + " to " + to);
hannoi(n - 1, buffer, from, to);
}
}

public static void main(String[] args) {
hannoi(3, "A", "B", "C");
}

快速排序

快速排序(英语:Quicksort),又称划分交换排序(partition-exchange sort),一种排序算法,最早由东尼·霍尔提出。在平均状况下,排序n个项目要Ο(n log n)次比较。在最坏状况下则需要Ο(n2)次比较,但这种状况并不常见。事实上,快速排序通常明显比其他Ο(n log n)算法更快,因为它的内部循环(inner loop)可以在大部分的架构上很有效率地被实现出来。

快速排序使用分治法(Divide and conquer)策略来把一个序列(list)分为两个子序列(sub-lists)。
步骤为:

  1. 从数列中挑出一个元素,称为”基准”(pivot)
  2. 重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区结束之后,该基准就处于数列的中间位置。这个称为分区(partition)操作。
  3. 递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序。
    递归的最底部情形,是数列的大小是零或一,也就是永远都已经被排序好了。虽然一直递归下去,但是这个算法总会结束,因为在每次的迭代(iteration)中,它至少会把一个元素摆到它最后的位置去。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
public class QuickSort {

static int[] arr;

private static void swap(int x, int y) {
int temp = arr[x];
arr[x] = arr[y];
arr[y] = temp;
}

private static void quick_sort_recursive(int start, int end) {
if (start >= end)
return;
int mid = arr[end];
int left = start, right = end - 1;
while (left < right) {
while (arr[left] < mid && left < right)
left++;
while (arr[right] >= mid && left < right)
right--;
swap(left, right);
}
if (arr[left] >= arr[end]) {
swap(left, end);
} else {
left++;
}
quick_sort_recursive(start, left - 1);
quick_sort_recursive(left + 1, end);
}

public static void sort(int[] arrin) {
arr = arrin;
quick_sort_recursive(0, arr.length - 1);
}

public static void main(String[] args) {
int[] array = {1, 5, 3, 2};
sort(array);
for (int i = 0; i < array.length; i++) {
int sortedElement = array[i];
System.out.println(sortedElement);
}
}
}
Dolphin的博客

Java内存模型(Memory Model)

发表于 2016-12-14 | 分类于 Programming |

JVM管理的内存区域(Memory Area)包括以下几个区域:

阅读全文 »
Dolphin的博客

Netty原理

发表于 2016-12-13 | 分类于 Programming |

Netty是一个高性能 事件驱动的异步的非堵塞的IO(NIO)框架,用于建立TCP等底层的连接,基于Netty可以建立高性能的Http服务器。支持HTTP、 WebSocket 、Protobuf、 Binary TCP |和UDP,Netty已经被很多高性能项目作为其Socket底层基础,如HornetQ Infinispan Vert.x
Play Framework Finangle和 Cassandra。其竞争对手是:Apache MINA和 Grizzly。

阅读全文 »
Dolphin的博客

Redis与Memcached区别

发表于 2016-12-13 | 分类于 Programming |

传统MySQL+ Memcached架构遇到的问题

实际MySQL是适合进行海量数据存储的,通过Memcached将热点数据加载到cache,加速访问,很多公司都曾经使用过这样的架构,但随着业务数据量的不断增加,和访问量的持续增长,我们遇到了很多问题:

阅读全文 »
Dolphin的博客

Redis集群(Redis Cluster)

发表于 2016-12-13 | 分类于 Programming |

在非官方集群解决方案中,物理上把数据“分片”(sharding)存储在多个Redis实例,一般情况下,每一“片”是一个Redis实例。

阅读全文 »
<i class="fa fa-angle-left"></i>1…232425…41<i class="fa fa-angle-right"></i>
xiaoqiang jiang

xiaoqiang jiang

201 日志
18 分类
175 标签
Creative Commons
推荐博客
  • 阮一峰的个人网站
  • 陈皓(CoolShell)
  • 阿里中间件团队博客
  • 小土刀的博客
  • Lucida的博客
  • stormzhang的博客
  • 四火的唠叨
© 2020 xiaoqiang jiang
由 Hexo 强力驱动
主题 - NexT.Muse