提交 fe8fcd94 编写于 作者: GreyZeng's avatar GreyZeng

sort alg

上级 fea2f915
......@@ -2,59 +2,60 @@ package 算法.位运算;
// 二进制与位运算
public class Code_PrintBinary {
// 打印一个32位整数的二进制形式
public static void printBinary(int num) {
for (int i = 31; i >= 0; i--) {
System.out.print((num & (1 << i)) == 0 ? "0" : "1");
}
System.out.println();
// 打印一个32位整数的二进制形式
public static void printBinary(int num) {
for (int i = 31; i >= 0; i--) {
System.out.print((num & (1 << i)) == 0 ? "0" : "1");
}
System.out.println();
}
public static int leftMostOne(int num) {
return num & (-num);
}
public static int leftMostOne2(int num) {
return num & (~num + 1);
}
// 取一个数最右侧的1
public static int leftMostOne(int num) {
return num & (-num);
}
public static void main(String[] args) {
printBinary(22);
printBinary(leftMostOne(22));
System.out.println(leftMostOne(22));
boolean right = true;
int times = Integer.MAX_VALUE;
for (int i = 0; i < times; i++) {
if (leftMostOne(i) != leftMostOne2(i)) {
right = false;
break;
}
}
if (!right) {
System.out.println("oops");
} else {
System.out.println("right");
}
public static int leftMostOne2(int num) {
return num & (~num + 1);
}
int num = 0b10001010_11101010_10001000_11101010;
System.out.println("要处理的数据是:");
System.out.println("10001010111010101000100011101010");
System.out.println("原始串:");
printBinary(num);
System.out.println("取反:");
printBinary(~num);
System.out.println("左移一位:");
printBinary(num << 1);
System.out.println("有符号右移一位:");
printBinary(num >> 1);
System.out.println("无符号右移一位:");
printBinary(num >>> 1);
System.out.println("系统最大值的二进制:");
printBinary(Integer.MAX_VALUE);
System.out.println("系统最小值的二进制:");
printBinary(Integer.MIN_VALUE);
System.out.println("负的系统最小值的二进制(还是本身):");
printBinary(-Integer.MIN_VALUE);
System.out.println((-Integer.MIN_VALUE) == Integer.MIN_VALUE);
public static void main(String[] args) {
printBinary(22);
printBinary(leftMostOne(22));
System.out.println(leftMostOne(22));
boolean right = true;
int times = Integer.MAX_VALUE;
for (int i = 0; i < times; i++) {
if (leftMostOne(i) != leftMostOne2(i)) {
right = false;
break;
}
}
if (!right) {
System.out.println("oops");
} else {
System.out.println("right");
}
int num = 0b10001010_11101010_10001000_11101010;
System.out.println("要处理的数据是:");
System.out.println("10001010111010101000100011101010");
System.out.println("原始串:");
printBinary(num);
System.out.println("取反:");
printBinary(~num);
System.out.println("左移一位:");
printBinary(num << 1);
System.out.println(">> 表示有符号右移一位:");
printBinary(num >> 1);
System.out.println(">>> 表示无符号右移一位:");
printBinary(num >>> 1);
System.out.println("系统最大值的二进制:");
printBinary(Integer.MAX_VALUE);
System.out.println("系统最小值的二进制:");
printBinary(Integer.MIN_VALUE);
System.out.println("负的系统最小值的二进制(还是本身):");
printBinary(-Integer.MIN_VALUE);
// System.out.println(-Integer.MIN_VALUE == Integer.MIN_VALUE);
}
}
......@@ -3,109 +3,111 @@ package 算法.排序;
import java.util.Arrays;
/**
* 冒泡,选择,插入排序
*
* @author Grey
* @see <a href="https://www.cnblogs.com/greyzeng/p/15186769.html">笔记</a>
* @see <a href="https://www.cnblogs.com/greyzeng/p/15186769.html">简单排序</a>
*/
public class Code_Sort {
// 冒泡排序
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 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 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);
}
}
// 插入排序
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);
}
}
}
// 选择排序
public static void selectionSort(int[] arr) {
if (null == arr || arr.length < 2) {
return;
}
for (int i = 0; i < arr.length - 1; i++) {
int min = i;
for (int j = i + 1; j < arr.length; j++) {
min = arr[j] > arr[min] ? min : j;
}
swap(arr, i, min);
}
// 选择排序
public static void selectionSort(int[] arr) {
if (null == arr || arr.length < 2) {
return;
}
private static void swap(int[] arr, int i, int j) {
if (arr == null || arr.length < 2) {
return;
}
if (i != j) {
arr[i] = arr[i] ^ arr[j];
arr[j] = arr[i] ^ arr[j];
arr[i] = arr[i] ^ arr[j];
}
for (int i = 0; i < arr.length - 1; i++) {
int min = i;
for (int j = i + 1; j < arr.length; j++) {
min = arr[j] > arr[min] ? min : j;
}
swap(arr, i, min);
}
}
// for test
public static void absRight(int[] arr) {
Arrays.sort(arr);
private static void swap(int[] arr, int i, int j) {
if (arr == null || arr.length < 2) {
return;
}
if (i != j) {
arr[i] = arr[i] ^ arr[j];
arr[j] = arr[i] ^ arr[j];
arr[i] = arr[i] ^ arr[j];
}
}
private static int[] generateRandomArray(int maxSize, int maxValue) {
// Math.random() -> [0,1)
// Math.random() * N -> [0,N)
// (int)(Math.random()*N) -> [0,N-1]
int[] arr = new int[(int) (Math.random() * (maxSize + 1))];
for (int i = 0; i < arr.length; i++) {
// [-? , +?]
arr[i] = (int) ((maxValue + 1) * Math.random()) - (int) ((maxValue + 1) * Math.random());
}
return arr;
// for test
public static void absRight(int[] arr) {
Arrays.sort(arr);
}
private static int[] generateRandomArray(int maxSize, int maxValue) {
// Math.random() -> [0,1)
// Math.random() * N -> [0,N)
// (int)(Math.random()*N) -> [0,N-1]
int[] arr = new int[(int) (Math.random() * (maxSize + 1))];
for (int i = 0; i < arr.length; i++) {
// [-? , +?]
arr[i] = (int) ((maxValue + 1) * Math.random()) - (int) ((maxValue + 1) * Math.random());
}
return arr;
}
private static int[] copyArray(int[] arr1) {
if (arr1 == null) {
return null;
}
int[] arr2 = new int[arr1.length];
System.arraycopy(arr1, 0, arr2, 0, arr1.length);
return arr2;
private static int[] copyArray(int[] arr1) {
if (arr1 == null) {
return null;
}
int[] arr2 = new int[arr1.length];
System.arraycopy(arr1, 0, arr2, 0, arr1.length);
return arr2;
}
public static void main(String[] args) {
int times = 500000; // 测试的次数
int maxSize = 100; // 数组的最大长度是100
int maxValue = 100; // 数组元素的大小[-100,100]
boolean succeed = true;
for (int i = 0; i < times; i++) {
int[] arr1 = generateRandomArray(maxSize, maxValue);
int[] arr2 = copyArray(arr1);
int[] arr3 = copyArray(arr1);
int[] arr4 = copyArray(arr1);
bubbleSort(arr1);
selectionSort(arr2);
insertionSort(arr3);
absRight(arr4);
if (!Arrays.equals(arr1, arr4) || !Arrays.equals(arr2, arr4) || !Arrays.equals(arr3, arr4)) {
succeed = false;
break;
}
}
System.out.println(succeed ? "Nice!" : "Fucking fucked!");
public static void main(String[] args) {
int times = 500000; // 测试的次数
int maxSize = 100; // 数组的最大长度是100
int maxValue = 100; // 数组元素的大小[-100,100]
boolean succeed = true;
for (int i = 0; i < times; i++) {
int[] arr1 = generateRandomArray(maxSize, maxValue);
int[] arr2 = copyArray(arr1);
int[] arr3 = copyArray(arr1);
int[] arr4 = copyArray(arr1);
bubbleSort(arr1);
selectionSort(arr2);
insertionSort(arr3);
absRight(arr4);
if (!Arrays.equals(arr1, arr4) || !Arrays.equals(arr2, arr4) || !Arrays.equals(arr3, arr4)) {
succeed = false;
break;
}
}
System.out.println(succeed ? "Nice!" : "Fucking fucked!");
}
}
......@@ -3,20 +3,17 @@ package 练习题;
import java.util.HashMap;
import java.util.Map;
/**
* @author Grey
* @date 2021年7月13日 下午11:12:15
* @since 1.8
*/
// https://leetcode.cn/problems/two-sum/
@Deprecated
public class LeetCode_0001_TwoSum {
public int[] twoSum(int[] nums, int target) {
Map<Integer, Integer> map = new HashMap<>(nums.length);
for (int i = 0; i < nums.length; i++) {
if (map.containsKey(target - nums[i])) {
return new int[]{map.get(target - nums[i]), i};
}
map.put(nums[i], i);
}
return new int[]{-1, -1};
public int[] twoSum(int[] nums, int target) {
Map<Integer, Integer> map = new HashMap<>(nums.length);
for (int i = 0; i < nums.length; i++) {
if (map.containsKey(target - nums[i])) {
return new int[] {map.get(target - nums[i]), i};
}
map.put(nums[i], i);
}
return new int[] {-1, -1};
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册