From 20bb195d92ae3e5e927b03ac0bdf0aa041229358 Mon Sep 17 00:00:00 2001 From: Nezuko-Wen <409053122@qq.com> Date: Sun, 7 Aug 2022 16:13:58 +0800 Subject: [PATCH] =?UTF-8?q?=E5=BD=92=E5=B9=B6=E6=8E=92=E5=BA=8F=20?= =?UTF-8?q?=E9=80=92=E5=BD=92?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bitoperation/FindOneCount.java} | 4 +- src/{ => algorithm}/sort/BubbleSort.java | 4 +- src/{ => algorithm}/sort/HeapSort.java | 2 +- src/{ => algorithm}/sort/InsertSort.java | 2 +- src/algorithm/sort/MergeSort.java | 86 +++++++++++++++++++ src/{ => algorithm}/sort/QuickSort.java | 2 +- src/{ => algorithm}/sort/SelectSort.java | 2 +- src/{ => algorithm}/sort/ShellSort.java | 2 +- src/{ => algorithm}/sort/Sort.java | 2 +- src/algorithm/sort/SortTest.java | 16 ++++ src/{ => ds}/linklist/DoubleNode.java | 2 +- src/{ => ds}/linklist/Node.java | 2 +- src/{ => ds}/linklist/ReverseLinkList.java | 2 +- src/{ => ds}/queue/DoubleEndsQueue.java | 4 +- src/sort/MergeSort.java | 47 ---------- 15 files changed, 116 insertions(+), 63 deletions(-) rename src/{bitoperation/OneCount.java => algorithm/bitoperation/FindOneCount.java} (86%) rename src/{ => algorithm}/sort/BubbleSort.java (92%) rename src/{ => algorithm}/sort/HeapSort.java (98%) rename src/{ => algorithm}/sort/InsertSort.java (96%) create mode 100644 src/algorithm/sort/MergeSort.java rename src/{ => algorithm}/sort/QuickSort.java (97%) rename src/{ => algorithm}/sort/SelectSort.java (94%) rename src/{ => algorithm}/sort/ShellSort.java (97%) rename src/{ => algorithm}/sort/Sort.java (93%) create mode 100644 src/algorithm/sort/SortTest.java rename src/{ => ds}/linklist/DoubleNode.java (91%) rename src/{ => ds}/linklist/Node.java (89%) rename src/{ => ds}/linklist/ReverseLinkList.java (98%) rename src/{ => ds}/queue/DoubleEndsQueue.java (89%) delete mode 100644 src/sort/MergeSort.java diff --git a/src/bitoperation/OneCount.java b/src/algorithm/bitoperation/FindOneCount.java similarity index 86% rename from src/bitoperation/OneCount.java rename to src/algorithm/bitoperation/FindOneCount.java index 2eb00df..f5bae25 100644 --- a/src/bitoperation/OneCount.java +++ b/src/algorithm/bitoperation/FindOneCount.java @@ -1,11 +1,11 @@ -package bitoperation; +package algorithm.bitoperation; /** * 二进制中1的个数 * @author Wen * @date 2021/12/29 22:53 */ -public class OneCount { +public class FindOneCount { public static void main(String[] args) { System.out.println(findOneCount(7)); diff --git a/src/sort/BubbleSort.java b/src/algorithm/sort/BubbleSort.java similarity index 92% rename from src/sort/BubbleSort.java rename to src/algorithm/sort/BubbleSort.java index 51631ef..5806162 100644 --- a/src/sort/BubbleSort.java +++ b/src/algorithm/sort/BubbleSort.java @@ -1,6 +1,4 @@ -package sort; - -import javax.sound.midi.Soundbank; +package algorithm.sort; /** * 冒泡排序 diff --git a/src/sort/HeapSort.java b/src/algorithm/sort/HeapSort.java similarity index 98% rename from src/sort/HeapSort.java rename to src/algorithm/sort/HeapSort.java index 154b6c1..3138e14 100644 --- a/src/sort/HeapSort.java +++ b/src/algorithm/sort/HeapSort.java @@ -1,4 +1,4 @@ -package sort; +package algorithm.sort; /** * 堆排序 diff --git a/src/sort/InsertSort.java b/src/algorithm/sort/InsertSort.java similarity index 96% rename from src/sort/InsertSort.java rename to src/algorithm/sort/InsertSort.java index fdd1f73..c2e2746 100644 --- a/src/sort/InsertSort.java +++ b/src/algorithm/sort/InsertSort.java @@ -1,4 +1,4 @@ -package sort; +package algorithm.sort; /** * 插入排序 diff --git a/src/algorithm/sort/MergeSort.java b/src/algorithm/sort/MergeSort.java new file mode 100644 index 0000000..2730452 --- /dev/null +++ b/src/algorithm/sort/MergeSort.java @@ -0,0 +1,86 @@ +package algorithm.sort; + +import java.util.ArrayList; +import java.util.List; + +/** + * 归并排序 + * + * @param + */ +public class MergeSort> extends Sort { + @Override + public void sort(T[] nums) { + int l = 0, r = nums.length - 1; + merge(nums, l, r); + } + + private void merge(T[] nums, int l, int r) { + if (l == r) { + return; + } + int mid = l + ((r - l) >> 1); + int left = l; + int right = mid + 1; + merge(nums, l, mid); + merge(nums, mid + 1, r); + List temp = new ArrayList<>(r - l + 1); + while (left <= mid && right <= r) { + if (less(nums[left], nums[right])) { + temp.add(nums[left++]); + // temp[index++] = nums[left++]; + } else { + // temp[index++] = nums[right++]; + temp.add(nums[right++]); + } + } + while (left <= mid) { + temp.add(nums[left++]); + } + while (right <= r) { + temp.add(nums[right++]); + } + for (int i = 0; i < temp.size(); i++) { + nums[l + i] = temp.get(i); + } + } + // @Override + // public void sort(T[] nums) { + // int length = nums.length; + // T[] tempArr = (T[]) new Comparable[length]; + // //合并的个体数组大小 + // int mergeNum = 1; + // while (mergeNum <= length){ + // int startSubscript = 0; + // for (int i = 0;i < length;i++){ + // tempArr[i] = nums[i]; + // } + // while ((startSubscript + 1) * mergeNum < length){ + // //第一组初始下标 + // int leftSub = startSubscript * mergeNum; + // //第二组初始下标 + // int rightSub = (startSubscript + 1) * mergeNum; + // //左数组长度 + // int leftArrLen = mergeNum; + // //右数据长度 + // int rightArrLen = (length - rightSub) > mergeNum ? mergeNum : (length - rightSub); + // int leftEnd = leftSub + leftArrLen; + // int rightEnd = rightSub + rightArrLen; + // int count = leftSub; + // for (;rightSub < rightEnd || leftSub < leftEnd;){ + // if (leftSub == leftEnd){ + // nums[count++] = tempArr[rightSub++]; + // }else if (rightSub == rightEnd) { + // nums[count++] = tempArr[leftSub++]; + // }else if (less(tempArr[leftSub], tempArr[rightSub])){ + // nums[count++] = tempArr[leftSub++]; + // }else{ + // nums[count++] = tempArr[rightSub++]; + // } + // } + // startSubscript = startSubscript + 2; + // } + // mergeNum = mergeNum * 2; + // } + // } +} diff --git a/src/sort/QuickSort.java b/src/algorithm/sort/QuickSort.java similarity index 97% rename from src/sort/QuickSort.java rename to src/algorithm/sort/QuickSort.java index a706bd5..973aa41 100644 --- a/src/sort/QuickSort.java +++ b/src/algorithm/sort/QuickSort.java @@ -1,4 +1,4 @@ -package sort; +package algorithm.sort; /** * 快速排序 diff --git a/src/sort/SelectSort.java b/src/algorithm/sort/SelectSort.java similarity index 94% rename from src/sort/SelectSort.java rename to src/algorithm/sort/SelectSort.java index ce1e7dc..ca22a53 100644 --- a/src/sort/SelectSort.java +++ b/src/algorithm/sort/SelectSort.java @@ -1,4 +1,4 @@ -package sort; +package algorithm.sort; /** * 选择排序 diff --git a/src/sort/ShellSort.java b/src/algorithm/sort/ShellSort.java similarity index 97% rename from src/sort/ShellSort.java rename to src/algorithm/sort/ShellSort.java index 7319f13..5bd39f7 100644 --- a/src/sort/ShellSort.java +++ b/src/algorithm/sort/ShellSort.java @@ -1,4 +1,4 @@ -package sort; +package algorithm.sort; /** * 希尔排序 diff --git a/src/sort/Sort.java b/src/algorithm/sort/Sort.java similarity index 93% rename from src/sort/Sort.java rename to src/algorithm/sort/Sort.java index 9663dbc..1f1daa2 100644 --- a/src/sort/Sort.java +++ b/src/algorithm/sort/Sort.java @@ -1,4 +1,4 @@ -package sort; +package algorithm.sort; public abstract class Sort> { diff --git a/src/algorithm/sort/SortTest.java b/src/algorithm/sort/SortTest.java new file mode 100644 index 0000000..1039d52 --- /dev/null +++ b/src/algorithm/sort/SortTest.java @@ -0,0 +1,16 @@ +package algorithm.sort; + +/** + * @author Wen + * @date 2022/8/7 15:39 + */ +public class SortTest { + public static void main(String[] args) { + Integer[] source = new Integer[]{2,1,3,64,7,3,1,3,24,5,3,6,7,9,3,24}; + MergeSort mergeSort = new MergeSort<>(); + mergeSort.sort(source); + for (int i : source) { + System.out.println(i + ","); + } + } +} diff --git a/src/linklist/DoubleNode.java b/src/ds/linklist/DoubleNode.java similarity index 91% rename from src/linklist/DoubleNode.java rename to src/ds/linklist/DoubleNode.java index ac151a4..09a611e 100644 --- a/src/linklist/DoubleNode.java +++ b/src/ds/linklist/DoubleNode.java @@ -1,4 +1,4 @@ -package linklist; +package ds.linklist; /** * @author Wen diff --git a/src/linklist/Node.java b/src/ds/linklist/Node.java similarity index 89% rename from src/linklist/Node.java rename to src/ds/linklist/Node.java index 41ce4e1..74061b6 100644 --- a/src/linklist/Node.java +++ b/src/ds/linklist/Node.java @@ -1,4 +1,4 @@ -package linklist; +package ds.linklist; /** * @author Wen diff --git a/src/linklist/ReverseLinkList.java b/src/ds/linklist/ReverseLinkList.java similarity index 98% rename from src/linklist/ReverseLinkList.java rename to src/ds/linklist/ReverseLinkList.java index e49bf7e..1d3948e 100644 --- a/src/linklist/ReverseLinkList.java +++ b/src/ds/linklist/ReverseLinkList.java @@ -1,4 +1,4 @@ -package linklist; +package ds.linklist; /** * @author Wen diff --git a/src/queue/DoubleEndsQueue.java b/src/ds/queue/DoubleEndsQueue.java similarity index 89% rename from src/queue/DoubleEndsQueue.java rename to src/ds/queue/DoubleEndsQueue.java index 61f80b2..d9eb17c 100644 --- a/src/queue/DoubleEndsQueue.java +++ b/src/ds/queue/DoubleEndsQueue.java @@ -1,6 +1,6 @@ -package queue; +package ds.queue; -import linklist.DoubleNode; +import ds.linklist.DoubleNode; /** * @author Wen diff --git a/src/sort/MergeSort.java b/src/sort/MergeSort.java deleted file mode 100644 index 5da970e..0000000 --- a/src/sort/MergeSort.java +++ /dev/null @@ -1,47 +0,0 @@ -package sort; - -/** - * 归并排序 - * @param - */ -public class MergeSort> extends Sort { - @Override - public void sort(T[] nums) { - int length = nums.length; - T[] tempArr = (T[]) new Comparable[length]; - //合并的个体数组大小 - int mergeNum = 1; - while (mergeNum <= length){ - int startSubscript = 0; - for (int i = 0;i < length;i++){ - tempArr[i] = nums[i]; - } - while ((startSubscript + 1) * mergeNum < length){ - //第一组初始下标 - int leftSub = startSubscript * mergeNum; - //第二组初始下标 - int rightSub = (startSubscript + 1) * mergeNum; - //左数组长度 - int leftArrLen = mergeNum; - //右数据长度 - int rightArrLen = (length - rightSub) > mergeNum ? mergeNum : (length - rightSub); - int leftEnd = leftSub + leftArrLen; - int rightEnd = rightSub + rightArrLen; - int count = leftSub; - for (;rightSub < rightEnd || leftSub < leftEnd;){ - if (leftSub == leftEnd){ - nums[count++] = tempArr[rightSub++]; - }else if (rightSub == rightEnd) { - nums[count++] = tempArr[leftSub++]; - }else if (less(tempArr[leftSub], tempArr[rightSub])){ - nums[count++] = tempArr[leftSub++]; - }else{ - nums[count++] = tempArr[rightSub++]; - } - } - startSubscript = startSubscript + 2; - } - mergeNum = mergeNum * 2; - } - } -}