From 5a4753da6357fef702ca6118b6ac07a6fcc7a85f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=9F=B3=E7=90=A6=E5=B3=B0?= Date: Sun, 18 Jun 2017 17:03:55 +0800 Subject: [PATCH 1/7] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=BD=92=E5=B9=B6?= =?UTF-8?q?=E6=8E=92=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cn/byhieg/algorithmtutorial/Sort.java | 54 +++++++++++++++++++ .../algorithmtutorialtest/SortTest.java | 9 +++- 2 files changed, 61 insertions(+), 2 deletions(-) diff --git a/src/main/java/cn/byhieg/algorithmtutorial/Sort.java b/src/main/java/cn/byhieg/algorithmtutorial/Sort.java index 6229a1f..6794e42 100644 --- a/src/main/java/cn/byhieg/algorithmtutorial/Sort.java +++ b/src/main/java/cn/byhieg/algorithmtutorial/Sort.java @@ -128,6 +128,59 @@ public void bubbleSort2(int[] nums) { } } + /** + * 归并排序,将数组一分为二,对于每一子数组继续进行上述步骤,直到子数组只有1个元素,那么自然是有序的。 + * 然后不断合并两个数组,直到合并到整个数组。 + * 时间复杂度o(NlgN) + * 空间复杂度o(N) + * @param nums + */ + public void mergeSort(int[] nums) { + int length = nums.length; + int low = 0; + int high = length - 1; + realSort(nums, low, high); + } + + /** + * 归并排序真正的sort函数 + * @param nums 待排序的数组 + * @param low 最低位 + * @param high 最高位 + */ + private void realSort(int[] nums, int low, int high) { + int mid = (low + high) / 2; + if (low < high) { + realSort(nums, low, mid); + realSort(nums, mid + 1, high); + realMerge(nums, low, mid, high); + } + } + + private void realMerge(int[] nums, int low, int mid, int high) { + int[] tmpNums = new int[high - low + 1]; + int leftPoint = low; + int rightPoint = mid + 1; + int index = 0; + + while (leftPoint <= mid && rightPoint <= high) { + if (nums[leftPoint] < nums[rightPoint]) { + tmpNums[index++] = nums[leftPoint++]; + }else{ + tmpNums[index++] = nums[rightPoint++]; + } + } + + while (leftPoint <= mid) { + tmpNums[index++] = nums[leftPoint++]; + } + while (rightPoint <= high) { + tmpNums[index++] = nums[rightPoint++]; + } + + System.arraycopy(tmpNums, 0, nums, low, tmpNums.length); + } + /** * 快速排序,选定一个切分元素,每一轮排序后,都保证切分元素之前的元素都小于切分元素,切分元素之后的元素都大于切分元素 * 时间复杂度o(NlgN) @@ -263,4 +316,5 @@ public void sink(int [] nums, int i,int n) { } + } diff --git a/src/test/java/cn/byhieg/algorithmtutorialtest/SortTest.java b/src/test/java/cn/byhieg/algorithmtutorialtest/SortTest.java index 08c1d90..046daca 100644 --- a/src/test/java/cn/byhieg/algorithmtutorialtest/SortTest.java +++ b/src/test/java/cn/byhieg/algorithmtutorialtest/SortTest.java @@ -41,8 +41,13 @@ public void tearDown() throws Exception { // new Sort().quickSort(nums); // } - public void testHeapSort() throws Exception { - new Sort().heapSort(nums); +// public void testHeapSort() throws Exception { +// new Sort().heapSort(nums); +// } + + public void testMergeSort() throws Exception { + new Sort().mergeSort(nums); + } } \ No newline at end of file From e5a710dae2385bbff30cd53899a9197a0974df11 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=9F=B3=E7=90=A6=E5=B3=B0?= Date: Sat, 24 Jun 2017 21:44:36 +0800 Subject: [PATCH 2/7] =?UTF-8?q?=E4=BF=AE=E6=94=B9README?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 21 ++++++++++++++---- .../JavaTutorial\347\233\256\345\275\225.jpg" | Bin 353150 -> 0 bytes .../JavaTutorial\347\233\256\345\275\225.png" | Bin 0 -> 400831 bytes 3 files changed, 17 insertions(+), 4 deletions(-) delete mode 100644 "images/JavaTutorial\347\233\256\345\275\225.jpg" create mode 100644 "images/JavaTutorial\347\233\256\345\275\225.png" diff --git a/README.md b/README.md index 49941a0..88bb506 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,8 @@ # JavaTutorial内容说明 该Java教程是学习Java过程中对Java知识点进行梳理。每一个包中的代码都有一个ReadMe来说明该包代码的作用以及知识点。 +src包里面是Java的源码,test包里面是针对源码的测试 -![Alt text](images/JavaTutorial目录.jpg) +![Alt text](images/JavaTutorial目录.png) ## ThreadTutorial内容说明 在源码路径下`cn.byhieg.threadtutorial`中放置的是Java多线程的代码和测试例子,在每一个章的包下,都有一个ReadMe来说明该章的知识点。 @@ -67,9 +68,6 @@ MapTutorial中的知识点有 - TreeMap的使用 - LinkedHashMap的使用 - - - ## AnnotationTutorial内容说明 在源码路径下`cn.byhieg.annotationtutorial`中放置的是Java注解类的代码和测试例子。在每一个包里面,都有一个ReadMe来说明该章的知识点。 @@ -79,7 +77,22 @@ MapTutorial中的知识点有 在源码路径下`cn.byhieg.iotutorial`中放置的是Java io类的代码和测试例子。在每一个包里面,都有一个ReadMe来说明该章的知识点。 +## DesignPattern内容说明 + +在源码路径下`cn.byhieg.designpatterntutorial`中放置的是Java 设计模式的代码和测试的例子。目前有 + +- 代理模式 +- 单例模式 +- builder模式 +## algorithmtutorial内容说明 +在源码路径下`cn.byhieg.algorithmtutorial`中放置的是Java实现的一些算法,内容如下: +- 二叉搜索树 +- 二叉树的常见的算法 +- 查找算法, +- 图的算法(DFS,BFS,Dijkstra) +- 单链表的算法 +- 排序算法。 diff --git "a/images/JavaTutorial\347\233\256\345\275\225.jpg" "b/images/JavaTutorial\347\233\256\345\275\225.jpg" deleted file mode 100644 index a4603a6e1fee9a5143d9d3147e1e181688b9c5e7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 353150 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