From 6cb19862a28999266a4d311431b2ef0a00674191 Mon Sep 17 00:00:00 2001 From: xiaokexiang Date: Mon, 15 Nov 2021 10:12:48 +0800 Subject: [PATCH] =?UTF-8?q?=E7=AE=97=E6=B3=95=E5=85=A5=E9=97=A8-=E6=8E=92?= =?UTF-8?q?=E5=BA=8F-=E6=8F=92=E5=85=A5=E6=8E=92=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../spring-common/pom.xml | 6 +++ .../common/algorithm/sort/InsertSort.java | 23 +++++++++ .../common/algorithm/sort/SelectSort.java | 13 ++--- .../common/algorithm/sort/SortCompare.java | 49 +++++++++++++++++++ .../common/algorithm/sort/SortExample.java | 2 +- .../common/algorithm/sort/SortMain.java | 18 +++++++ 6 files changed, 101 insertions(+), 10 deletions(-) create mode 100644 spring-boot-dependencies/spring-common/src/main/java/io/spring/common/algorithm/sort/InsertSort.java create mode 100644 spring-boot-dependencies/spring-common/src/main/java/io/spring/common/algorithm/sort/SortCompare.java create mode 100644 spring-boot-dependencies/spring-common/src/main/java/io/spring/common/algorithm/sort/SortMain.java diff --git a/spring-boot-dependencies/spring-common/pom.xml b/spring-boot-dependencies/spring-common/pom.xml index 3494e36..0d74c37 100644 --- a/spring-boot-dependencies/spring-common/pom.xml +++ b/spring-boot-dependencies/spring-common/pom.xml @@ -18,6 +18,12 @@ + + + edu.princeton.cs + algs4 + 1.0.3 + org.projectlombok lombok diff --git a/spring-boot-dependencies/spring-common/src/main/java/io/spring/common/algorithm/sort/InsertSort.java b/spring-boot-dependencies/spring-common/src/main/java/io/spring/common/algorithm/sort/InsertSort.java new file mode 100644 index 0000000..a8bdc3d --- /dev/null +++ b/spring-boot-dependencies/spring-common/src/main/java/io/spring/common/algorithm/sort/InsertSort.java @@ -0,0 +1,23 @@ +package io.spring.common.algorithm.sort; + +/** + * @author xiaokexiang + * @since 2021/11/12 + * 插入排序:元素依次与左边的元素进行比较,如果大于就进行交换 + * 时间复杂度: 1 + 2 + ... + (N - 1)次比较 与 1 + 2 + ... + (N - 1)次交换 -> N^2 + */ +public class InsertSort implements SortExample { + + @Override + public void sort(Integer[] ts, boolean show) { + for (int i = 1; i < ts.length; i++) { + // 依次和左边的元素进行比较,再换位 + for (int j = i; j > 0 && less(ts[j], ts[j - 1]); j--) { + exchange(ts, j, j - 1); + } + } + if (show) { + show(ts); + } + } +} diff --git a/spring-boot-dependencies/spring-common/src/main/java/io/spring/common/algorithm/sort/SelectSort.java b/spring-boot-dependencies/spring-common/src/main/java/io/spring/common/algorithm/sort/SelectSort.java index b332deb..3a46932 100644 --- a/spring-boot-dependencies/spring-common/src/main/java/io/spring/common/algorithm/sort/SelectSort.java +++ b/spring-boot-dependencies/spring-common/src/main/java/io/spring/common/algorithm/sort/SelectSort.java @@ -10,8 +10,7 @@ public class SelectSort implements SortExample { @Override - public void sort(Integer[] ts) { - + public void sort(Integer[] ts, boolean show) { for (int i = 0; i < ts.length; i++) { int min = i; // 找出最小的元素 @@ -22,12 +21,8 @@ public void sort(Integer[] ts) { } exchange(ts, i, min); } - show(ts); - } - - public static void main(String[] args) { - Integer[] arrays = new Integer[]{3, 1, 2, 5, 7}; - SelectSort selectSort = new SelectSort(); - selectSort.sort(arrays); + if (show) { + show(ts); + } } } diff --git a/spring-boot-dependencies/spring-common/src/main/java/io/spring/common/algorithm/sort/SortCompare.java b/spring-boot-dependencies/spring-common/src/main/java/io/spring/common/algorithm/sort/SortCompare.java new file mode 100644 index 0000000..947023a --- /dev/null +++ b/spring-boot-dependencies/spring-common/src/main/java/io/spring/common/algorithm/sort/SortCompare.java @@ -0,0 +1,49 @@ +package io.spring.common.algorithm.sort; + +import edu.princeton.cs.algs4.StdOut; +import edu.princeton.cs.algs4.StdRandom; +import edu.princeton.cs.algs4.Stopwatch; +import org.springframework.util.StopWatch; + +import java.util.Random; + +/** + * @author xiaokexiang + * @since 2021/11/15 + */ +public class SortCompare { + + public static double time(String func, Integer[] a) { + Stopwatch stopwatch = new Stopwatch(); + if (func.equals("Insertion")) { + new InsertSort().sort(a, false); + } else if (func.equals("Selection")) { + new SelectSort().sort(a, false); + } + return stopwatch.elapsedTime(); + } + + + public static double timeRandomInput(String alg, int N, int T) { + double total = 0.0; + Integer[] a = new Integer[N]; + for (int i = 0; i < T; i++) { + for (int j = 0; j < N; j++) { + a[j] = StdRandom.uniform(100); + } + total += time(alg, a); + } + return total; + } + + public static void main(String[] args) { + String alg1 = "Insertion"; + String alg2 = "Selection"; + int t = 100; + int n = 1000; + double t1 = timeRandomInput(alg1, n, t); + double t2 = timeRandomInput(alg2, n, t); + StdOut.printf("For %d random Double \n %s is ", n, alg1); + StdOut.printf("%.1f times faster than %s\n", t2 / t1, alg2); + } +} diff --git a/spring-boot-dependencies/spring-common/src/main/java/io/spring/common/algorithm/sort/SortExample.java b/spring-boot-dependencies/spring-common/src/main/java/io/spring/common/algorithm/sort/SortExample.java index 3672e95..345daa7 100644 --- a/spring-boot-dependencies/spring-common/src/main/java/io/spring/common/algorithm/sort/SortExample.java +++ b/spring-boot-dependencies/spring-common/src/main/java/io/spring/common/algorithm/sort/SortExample.java @@ -11,7 +11,7 @@ */ public interface SortExample> { - void sort(T[] ts); + void sort(T[] ts, boolean show); /** * 元素比较 diff --git a/spring-boot-dependencies/spring-common/src/main/java/io/spring/common/algorithm/sort/SortMain.java b/spring-boot-dependencies/spring-common/src/main/java/io/spring/common/algorithm/sort/SortMain.java new file mode 100644 index 0000000..27bbcce --- /dev/null +++ b/spring-boot-dependencies/spring-common/src/main/java/io/spring/common/algorithm/sort/SortMain.java @@ -0,0 +1,18 @@ +package io.spring.common.algorithm.sort; + +/** + * @author xiaokexiang + * @since 2021/11/12 + */ +public class SortMain { + + public static void main(String[] args) { + Integer[] arrays = new Integer[]{3, 1, 2, 5, 7}; + + SelectSort selectSort = new SelectSort(); + selectSort.sort(arrays, true); + System.out.println(); + InsertSort insertSort = new InsertSort(); + insertSort.sort(arrays, true); + } +}