parent
4e475ab638
commit
e4b6b6c2a8
@ -0,0 +1,8 @@
|
||||
/out/
|
||||
|
||||
*.iml
|
||||
|
||||
.idea
|
||||
|
||||
.DS_Store
|
||||
|
||||
@ -0,0 +1,87 @@
|
||||
package leo.class01;
|
||||
|
||||
|
||||
import leo.util.ArrayUtil;
|
||||
|
||||
import java.util.Arrays;
|
||||
|
||||
/**
|
||||
* @author Leo
|
||||
* @ClassName BSExist
|
||||
* @DATE 2020/11/12 10:14 上午
|
||||
* @Description 二分查找是否存在
|
||||
*/
|
||||
public class BSExist {
|
||||
|
||||
/**
|
||||
* 功能描述 : 二分查找某数是否存在
|
||||
* @author Leo
|
||||
* @date 2020/11/12 10:36 上午
|
||||
* @param arr 有序数组
|
||||
* @param value
|
||||
* @return boolean
|
||||
*/
|
||||
public static boolean exist(int[] arr, int value) {
|
||||
if (arr == null || arr.length == 0) {
|
||||
return false;
|
||||
}
|
||||
int L = 0;
|
||||
int R = arr.length - 1;
|
||||
int mid = 0;
|
||||
while (L < R) {
|
||||
//右移一位表示除以2
|
||||
mid = L + ((R - L) >> 1);
|
||||
if (arr[mid] == value) {
|
||||
return true;
|
||||
} else if (arr[mid] > value) {
|
||||
R = mid - 1;
|
||||
}else {
|
||||
L = mid + 1;
|
||||
}
|
||||
}
|
||||
return arr[L] == value;
|
||||
}
|
||||
|
||||
/**
|
||||
* 功能描述 : test
|
||||
* @author Leo
|
||||
* @date 2020/11/12 10:36 上午
|
||||
* @param arr 二分查找某数是否存在
|
||||
* @param value
|
||||
* @return boolean
|
||||
*/
|
||||
public static boolean forExist(int[] arr, int value) {
|
||||
for (int i : arr) {
|
||||
if (i == value) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
public static void main(String[] args){
|
||||
|
||||
int maxSize = 50;
|
||||
int range = 500;
|
||||
int testTime = 100;
|
||||
boolean succeed = true;
|
||||
for (int i = 0; i < testTime; i++) {
|
||||
int[] sortArr = ArrayUtil.randomSortArray(maxSize, range);
|
||||
int value = (int) ((range + 1) * Math.random() - (range + 1) * Math.random());
|
||||
|
||||
if (exist(sortArr, value) != forExist(sortArr, value)) {
|
||||
succeed = false;
|
||||
ArrayUtil.printArr(sortArr);
|
||||
break;
|
||||
}
|
||||
}
|
||||
System.out.println(succeed ? "Nice!" : "Fucking Fucked!");
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@ -0,0 +1,142 @@
|
||||
package leo.class01;
|
||||
|
||||
import leo.util.ArrayUtil;
|
||||
|
||||
/**
|
||||
* @author Leo
|
||||
* @ClassName BSNear
|
||||
* @DATE 2020/11/12 11:18 上午
|
||||
* @Description
|
||||
*/
|
||||
public class BSNear {
|
||||
|
||||
/**
|
||||
* 功能描述 : 在有序数组中找出>=某个数最左侧的位置
|
||||
* @author Leo
|
||||
* @date 2020/11/12 3:01 下午
|
||||
* @param arr
|
||||
* @param value
|
||||
* @return int
|
||||
*/
|
||||
public static int BSNearLeft(int[] arr, int value) {
|
||||
if (arr == null || arr.length == 0) {
|
||||
return -1;
|
||||
}
|
||||
int index = -1;
|
||||
int L = 0;
|
||||
int R = arr.length - 1;
|
||||
while (L <= R) {
|
||||
int mid = L + ((R - L) >> 1);
|
||||
if (arr[mid] >= value) {
|
||||
index = mid;
|
||||
R = mid - 1;
|
||||
} else {
|
||||
L = mid + 1;
|
||||
}
|
||||
|
||||
}
|
||||
return index;
|
||||
}
|
||||
|
||||
/**
|
||||
* 功能描述 : 在有序数组中找出>=某个数最左侧的位置(for test)
|
||||
* @author Leo
|
||||
* @date 2020/11/12 3:02 下午
|
||||
* @param arr
|
||||
* @param value
|
||||
* @return int
|
||||
*/
|
||||
public static int forTestBSNearLeft(int[] arr, int value) {
|
||||
if (arr == null || arr.length == 0) {
|
||||
return -1;
|
||||
}
|
||||
for (int i = 0; i < arr.length; i++) {
|
||||
if (arr[i] >= value) {
|
||||
return i;
|
||||
}
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 功能描述 : 在有序数组中找出<=某个数最右侧的位置
|
||||
* @author Leo
|
||||
* @date 2020/11/12 3:05 下午
|
||||
* @param arr
|
||||
* @param value
|
||||
* @throw
|
||||
* @return int
|
||||
*/
|
||||
public static int BSNearRight(int[] arr, int value) {
|
||||
int index = -1;
|
||||
if (arr == null || arr.length == 0) {
|
||||
return index;
|
||||
}
|
||||
int L = 0;
|
||||
int R = arr.length - 1;
|
||||
int mid = 0;
|
||||
while (L <= R) {
|
||||
mid = (L + R) >> 1;
|
||||
if (arr[mid] <= value) {
|
||||
index = mid;
|
||||
L = mid + 1;
|
||||
} else {
|
||||
R = mid - 1;
|
||||
}
|
||||
}
|
||||
return index;
|
||||
}
|
||||
|
||||
public static int forTestBSNearRight(int[] arr, int value) {
|
||||
int index = -1;
|
||||
if (arr == null || arr.length == 0) {
|
||||
return index;
|
||||
}
|
||||
for (int i = arr.length - 1; i >= 0; i--) {
|
||||
if (arr[i] <= value) {
|
||||
return i;
|
||||
}
|
||||
}
|
||||
return index;
|
||||
}
|
||||
|
||||
|
||||
public static void main(String[] args){
|
||||
int maxSize = 80;
|
||||
int range = 800;
|
||||
int testTime = 10000;
|
||||
boolean success = true;
|
||||
for (int i = 0; i < testTime; i++) {
|
||||
int[] sortArr = ArrayUtil.randomSortArray(maxSize, range);
|
||||
int value = (int) ((range + 1) * Math.random() - (range + 1) * Math.random());
|
||||
final int res1 = BSNearLeft(sortArr, value);
|
||||
final int res2 = forTestBSNearLeft(sortArr, value);
|
||||
final int res3 = BSNearRight(sortArr, value);
|
||||
final int res4 = forTestBSNearRight(sortArr, value);
|
||||
|
||||
if (res1 != res2) {
|
||||
success = false;
|
||||
ArrayUtil.printArr(sortArr);
|
||||
System.out.println("BSNearLeft=" + res1);
|
||||
System.out.println("forTestBSNearLeft=" + res2);
|
||||
break;
|
||||
}
|
||||
if (res3 != res4) {
|
||||
success = false;
|
||||
ArrayUtil.printArr(sortArr);
|
||||
System.out.println("BSNearRight=" + res3);
|
||||
System.out.println("forTestBSNearRight=" + res4);
|
||||
break;
|
||||
}
|
||||
}
|
||||
System.out.println(success ? "Nice!!" : "Fucking Fucked!");
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
@ -0,0 +1,95 @@
|
||||
package leo.class01;
|
||||
|
||||
import leo.util.ArrayUtil;
|
||||
|
||||
import java.util.Arrays;
|
||||
|
||||
/**
|
||||
* @author Leo
|
||||
* @ClassName BubbleSort
|
||||
* @DATE 2020/11/11 9:05 下午
|
||||
* @Description 冒泡算法
|
||||
*/
|
||||
public class BubbleSort {
|
||||
|
||||
/**
|
||||
* 功能描述 : 冒泡算法 O(n²)
|
||||
* @author Leo
|
||||
* @date 2020/11/11 10:09 下午
|
||||
* @param arr
|
||||
* @return void
|
||||
*/
|
||||
public static void bubbleSort(int[] arr) {
|
||||
if (arr == null || arr.length < 2) {
|
||||
return;
|
||||
}
|
||||
for (int i = arr.length-1; i > 0; i--) {
|
||||
for (int j = 0; j < i; j++) {
|
||||
if (arr[j] > arr[j + 1]) {
|
||||
swap(arr, j, j + 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public static void bubbleSort2(int[] arr) {
|
||||
if (arr == null || arr.length < 2) {
|
||||
return;
|
||||
}
|
||||
for (int i = arr.length - 1; i > 0; i--) {
|
||||
for (int j = 0; j < i; j++) {
|
||||
if (arr[j] > arr[j + 1]) {
|
||||
swap(arr, j, j + 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 功能描述 : 交换
|
||||
* @author Leo
|
||||
* @date 2020/11/11 6:34 下午
|
||||
* @param arr
|
||||
* @param i
|
||||
* @param j
|
||||
* @return void
|
||||
*/
|
||||
private static void swap(int[] arr, int i, int j) {
|
||||
if (arr == null ||
|
||||
arr.length <= i ||
|
||||
arr.length <= j ||
|
||||
i == j) {
|
||||
return;
|
||||
}
|
||||
arr[i] = arr[i] ^ arr[j];
|
||||
arr[j] = arr[i] ^ arr[j];
|
||||
arr[i] = arr[i] ^ arr[j];
|
||||
}
|
||||
|
||||
|
||||
public static void main(String[] args){
|
||||
int maxSize = 500;
|
||||
int range = 20;
|
||||
int testOfTime = 100000;
|
||||
boolean succeed = true;
|
||||
for (int i = 0; i < testOfTime; i++) {
|
||||
int[] arr = ArrayUtil.randomArray(maxSize, range);
|
||||
int[] anotherArr = ArrayUtil.copyArray(arr);
|
||||
bubbleSort2(arr);
|
||||
Arrays.sort(anotherArr);
|
||||
if (!ArrayUtil.isEqual(arr, anotherArr)) {
|
||||
succeed = false;
|
||||
ArrayUtil.printArr(arr, "arr");
|
||||
ArrayUtil.printArr(anotherArr, "anotherArr");
|
||||
break;
|
||||
}
|
||||
}
|
||||
System.out.println(succeed ? "Nice!" : "Fucking fucked!");
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,75 @@
|
||||
package leo.class01;
|
||||
|
||||
import leo.util.ArrayUtil;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.jar.JarEntry;
|
||||
|
||||
/**
|
||||
* @author Leo
|
||||
* @ClassName InsertionSort
|
||||
* @DATE 2020/11/12 9:21 上午
|
||||
* @Description
|
||||
*/
|
||||
public class InsertionSort {
|
||||
|
||||
|
||||
/**
|
||||
* 功能描述 : 插入排序
|
||||
* @author Leo
|
||||
* @date 2020/11/12 9:58 上午
|
||||
* @param arr
|
||||
* @throw
|
||||
* @return void
|
||||
*/
|
||||
public static void insertionSort(int[] arr) {
|
||||
if (arr == null || arr.length < 2) {
|
||||
return;
|
||||
}
|
||||
for (int i = 1; i < arr.length; i++) {
|
||||
for (int j = i - 1; j >= 0 && arr[j] > arr[j + 1]; j--) {
|
||||
swap(arr, j, j + 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private static void swap(int[] arr, int i, int j) {
|
||||
if (arr == null
|
||||
|| arr.length < 2
|
||||
|| arr.length <= i
|
||||
|| arr.length <= j) {
|
||||
return;
|
||||
}
|
||||
|
||||
arr[i] = arr[i] ^ arr[j];
|
||||
arr[j] = arr[i] ^ arr[j];
|
||||
arr[i] = arr[i] ^ arr[j];
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
public static void main(String[] args){
|
||||
int maxSize = 50;
|
||||
int range = 80;
|
||||
int testOfTime = 100000;
|
||||
boolean succeed = true;
|
||||
for (int i = 0; i < testOfTime; i++) {
|
||||
int[] arr = ArrayUtil.randomArray(maxSize, range);
|
||||
int[] anotherArr = ArrayUtil.copyArray(arr);
|
||||
insertionSort(arr);
|
||||
Arrays.sort(anotherArr);
|
||||
if (!ArrayUtil.isEqual(arr, anotherArr)) {
|
||||
succeed = false;
|
||||
ArrayUtil.printArr(arr, "arr");
|
||||
ArrayUtil.printArr(anotherArr, "anotherArr");
|
||||
break;
|
||||
}
|
||||
}
|
||||
System.out.println(succeed ? "Nice!" : "Fucking fucked!");
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@ -0,0 +1,130 @@
|
||||
package leo.class01;
|
||||
|
||||
import leo.util.ArrayUtil;
|
||||
|
||||
import java.util.Arrays;
|
||||
|
||||
/**
|
||||
* @author Leo
|
||||
* @ClassName SelectionSort
|
||||
* @DATE 2020/11/11 6:24 下午
|
||||
* @Description 选择排序
|
||||
*/
|
||||
public class SelectionSort {
|
||||
|
||||
/**
|
||||
* 功能描述 : 选择排序 O(n²)
|
||||
* @author Leo
|
||||
* @date 2020/11/11 6:38 下午
|
||||
* @param arr
|
||||
* @return void
|
||||
*/
|
||||
public static void selectionSort(int[] arr) {
|
||||
if (arr == null || arr.length < 2) {
|
||||
return;
|
||||
}
|
||||
for (int i = 0; i < arr.length-1; i++) {
|
||||
int minIndex = i;
|
||||
for (int j = i + 1; j < arr.length; j++) {
|
||||
minIndex = arr[j] > arr[minIndex] ? minIndex : j;
|
||||
}
|
||||
swap(arr, i, minIndex);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 功能描述 :
|
||||
* @author Leo
|
||||
* @date 2020/11/11 9:15 下午
|
||||
* @param arr
|
||||
* @return void
|
||||
*/
|
||||
public static void selectionSort2(int[] arr) {
|
||||
if (arr == null || arr.length < 2) {
|
||||
return;
|
||||
}
|
||||
for (int i = 0; i < arr.length-1; i++) {
|
||||
int minIndex = i;
|
||||
for (int j = i + 1; j < arr.length; j++) {
|
||||
minIndex = arr[j] < arr[minIndex] ? j : minIndex;
|
||||
}
|
||||
swap(arr, i, minIndex);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public static void selectionSort3(int[] arr) {
|
||||
if (arr == null || arr.length < 2) {
|
||||
return;
|
||||
}
|
||||
for (int i = 0; i < arr.length - 1; i++) {
|
||||
int minIndex = i;
|
||||
for (int j = i+1; j < arr.length; j++) {
|
||||
minIndex = arr[j] > arr[minIndex] ? minIndex : j;
|
||||
}
|
||||
swap(arr, i, minIndex);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public static void selectionSort4(int[] arr) {
|
||||
if (arr == null || arr.length < 2) {
|
||||
return;
|
||||
}
|
||||
for (int i = 0; i < arr.length - 1; i++) {
|
||||
int minIndex = i;
|
||||
for (int j = i + 1; j < arr.length; j++) {
|
||||
minIndex = arr[j] < arr[minIndex] ? j : minIndex;
|
||||
}
|
||||
swap(arr, i, minIndex);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 功能描述 : 交换
|
||||
* @author Leo
|
||||
* @date 2020/11/11 6:34 下午
|
||||
* @param arr
|
||||
* @param i
|
||||
* @param j
|
||||
* @return void
|
||||
*/
|
||||
private static void swap(int[] arr, int i, int j) {
|
||||
if (arr == null ||
|
||||
arr.length <= i ||
|
||||
arr.length <= j ||
|
||||
i == j) {
|
||||
return;
|
||||
}
|
||||
arr[j] = arr[j] ^ arr[i];
|
||||
arr[i] = arr[j] ^ arr[i];
|
||||
arr[j] = arr[j] ^ arr[i];
|
||||
}
|
||||
|
||||
|
||||
public static void main(String[] args){
|
||||
int maxSize = 100;
|
||||
int range = 50;
|
||||
int testOfTime = 100000;
|
||||
boolean succeed = true;
|
||||
for (int i = 0; i < testOfTime; i++) {
|
||||
int[] arr = ArrayUtil.randomArray(maxSize, range);
|
||||
int[] anotherArr = ArrayUtil.copyArray(arr);
|
||||
selectionSort4(arr);
|
||||
Arrays.sort(anotherArr);
|
||||
if (!ArrayUtil.isEqual(arr, anotherArr)) {
|
||||
succeed = false;
|
||||
ArrayUtil.printArr(arr, "arr");
|
||||
ArrayUtil.printArr(anotherArr, "anotherArr");
|
||||
break;
|
||||
}
|
||||
}
|
||||
System.out.println(succeed ? "Nice!" : "Fucking fucked!");
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@ -0,0 +1,159 @@
|
||||
package leo.util;
|
||||
|
||||
import java.util.Arrays;
|
||||
|
||||
/**
|
||||
* @author Leo
|
||||
* @ClassName util
|
||||
* @DATE 2020/11/11 6:55 下午
|
||||
* @Description 对数器工具
|
||||
*/
|
||||
public class ArrayUtil {
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 功能描述 : 随机生成数组
|
||||
* @author Leo
|
||||
* @date 2020/11/11 6:57 下午
|
||||
* @param maxSize 数组最大值
|
||||
* @param range 数组元素范围
|
||||
* @return int[]
|
||||
*/
|
||||
public static int[] randomArray(int maxSize, int range) {
|
||||
int[] arr = new int[(int) ((maxSize + 1) * Math.random())];
|
||||
for (int i = 0; i < arr.length; i++) {
|
||||
arr[i] = (int) ((range + 1) * Math.random()- (range * Math.random())) ;
|
||||
}
|
||||
return arr;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 功能描述 : 生成随机有序数组
|
||||
* @author Leo
|
||||
* @date 2020/11/12 10:42 上午
|
||||
* @param maxSize
|
||||
* @param range
|
||||
* @return int[]
|
||||
*/
|
||||
public static int[] randomSortArray(int maxSize, int range) {
|
||||
int[] arr = randomArray(maxSize, range);
|
||||
Arrays.sort(arr);
|
||||
return arr;
|
||||
}
|
||||
|
||||
/**
|
||||
* 功能描述 : 复制数组
|
||||
* @author Leo
|
||||
* @date 2020/11/11 6:57 下午
|
||||
* @param arr
|
||||
* @return int[]
|
||||
*/
|
||||
public static int[] copyArray(int[] arr) {
|
||||
int[] newArr = new int[arr.length];
|
||||
if (arr != null && arr.length > 0) {
|
||||
for (int i = 0; i < arr.length; i++) {
|
||||
newArr[i] = arr[i];
|
||||
}
|
||||
return newArr;
|
||||
}
|
||||
return newArr ;
|
||||
}
|
||||
|
||||
/**
|
||||
* 功能描述 : 判断数组是否一样
|
||||
* @author Leo
|
||||
* @date 2020/11/11 7:20 下午
|
||||
* @param arr1
|
||||
* @param arr2
|
||||
* @return boolean
|
||||
*/
|
||||
public static boolean isEqual(int[] arr1, int[] arr2) {
|
||||
return isEqual(arr1, arr2, false);
|
||||
}
|
||||
|
||||
/**
|
||||
* 功能描述 : 判断数组是否一样并打印
|
||||
* @author Leo
|
||||
* @date 2020/11/11 7:21 下午
|
||||
* @param arr1
|
||||
* @param arr2
|
||||
* @return boolean
|
||||
*/
|
||||
public static boolean isEqualAndPrint(int[] arr1, int[] arr2) {
|
||||
return isEqual(arr1, arr2, true);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 功能描述 : 判断数组
|
||||
* @author Leo
|
||||
* @date 2020/11/11 7:15 下午
|
||||
* @param arr1
|
||||
* @param arr2
|
||||
* @param printJudge 是否打印
|
||||
* @return boolean
|
||||
*/
|
||||
private static boolean isEqual(int[] arr1, int[] arr2,boolean printJudge) {
|
||||
|
||||
if (printJudge) {
|
||||
printArr(arr1, "arr1");
|
||||
printArr(arr2, "arr2");
|
||||
}
|
||||
if (arr1 == null && arr2 == null) {
|
||||
return true;
|
||||
}else if (arr1 == null || arr2 == null) {
|
||||
return false;
|
||||
}else if (arr1.length != arr2.length) {
|
||||
return false;
|
||||
|
||||
}
|
||||
for (int i = 0; i < arr1.length; i++) {
|
||||
if (arr1[i] != arr2[i]) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* 功能描述 : 打印数组
|
||||
* @author Leo
|
||||
* @date 2020/11/11 7:15 下午
|
||||
* @param arr
|
||||
* @param arrName
|
||||
* @return void
|
||||
*/
|
||||
public static void printArr(int[] arr, String arrName) {
|
||||
StringBuffer arrStr = new StringBuffer();
|
||||
arrName = arrName == null ? "arr" : arrName;
|
||||
arrStr.append(" " + arrName + " = [");
|
||||
if (arr == null || arr.length <= 0) {
|
||||
System.out.println();
|
||||
arrStr.append("]");
|
||||
}
|
||||
|
||||
for (int i = 0; i < arr.length; i++) {
|
||||
arrStr.append(" " + arr[i] + ",");
|
||||
}
|
||||
arrStr.substring(0, arrStr.length() - 2);
|
||||
arrStr.append(" ]");
|
||||
System.out.println(arrStr);
|
||||
}
|
||||
|
||||
/**
|
||||
* 功能描述 : 打印数组
|
||||
* @author Leo
|
||||
* @date 2020/11/12 2:17 下午
|
||||
* @param arr
|
||||
* @return void
|
||||
*/
|
||||
public static void printArr(int[] arr) {
|
||||
printArr(arr, null);
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
Loading…
Reference in new issue