高精度大整数计算
高精度大整数计算两个高精度大整数相加简单分析 由于两个都是大整数,需要用数组或容器来存。具体运算就跟手算一样,各位相加留下10的余数多于10的进位,从个位开始一直重复到最高位即可,最后需要注意进位是否还多出一位来。
代码12345678910111213141516171819202122232425262728293031// c++代码#include<iostream>#include<stdio.h>#include<string>#include<vector>using namespace std;vector<int> add(vector<int> &A,vector<int> &B){ vector<int> c; //用于存和 int t = 0; //进位 for(int i = 0;i < A.size() || i < B.size();i++){ //遍历从个位开始到最高位 ...
差值查找
插值查找分析相当于对二分查找的一种优化,让mid指针更加精确
代码1234567891011121314151617181920212223242526272829303132package 算法;public class 插值查找 { public static void main(String[] args) { int[] arr = new int[100]; for (int i = 0; i <100 ; i++) { arr[i] = i+1; } int index = insertValueSearch(arr, 0, arr.length-1, 99999); System.out.println(index); } public static int insertValueSearch(int[] arr,int left,int right,int num){ if(num& ...
二分查找
二分查找分析
首先必须是有序数组
先定义一个中心指针
循环看查找的数是否和中心点相等
若比中心点小肯定在它左边就继续对比左边,反之对比右边
如果左边界大于右边界了就退出循环
代码123456789101112131415161718192021222324252627package 算法;import java.util.Arrays;public class 二分查找 { public static void main(String[] args) { int[] arr = {3, 14, 53, 214, 542, 748}; System.out.println(binaryFind(arr, 111)); } public static int binaryFind(int[] arr, int num) { int l = 0, r = arr.length-1; int mid = (l + r) / 2; whi ...
归并排序
归并排序分析
代码123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354package 算法;import java.util.Arrays;public class 归并排序 { public static void main(String[] args) { int[] nums = new int[]{6,2,1,5,3,4,9,8}; int[] temp = new int[nums.length]; sort(nums, 0,nums.length-1, temp); System.out.println(Arrays.toString(nums)); } private static void sort(int[] arr,int left,int right,int[] temp){ ...
哈希排序
希尔排序分析
先将数组分为length/2组,然后依次/2分组
每组进行插入排序
最后再进行总的插入排序
代码1234567891011121314151617181920212223242526272829package 算法;public class 希尔排序 { public static void main(String[] args) { int[] arr = new int[]{8,9,1,7,2,3,5,4,6,0}; shellSort(arr); for (int i : arr) { System.out.println(i); } } private static void shellSort(int[] arr){ int len = arr.length; //循环进行分组,i表示分组数 for (int i = len/2; i > ...
基数排序
基数排序分析基数排序(Radix Sort)是桶排序的扩展,它的基本思想是:将整数按位数切割成不同的数字,然后按每个位数分别比较。具体做法是:将所有待比较数值统一为同样的数位长度,数位较短的数前面补零。然后,从最低位开始,依次进行一次排序。这样从最低位排序一直到最高位排序完成以后, 数列就变成一个有序序列。
代码123456789101112131415161718192021222324252627282930313233343536373839404142434445package 算法;import java.util.Arrays;public class 基数排序 { public static void main(String[] args) { int[] arr = {53,3,542,748,1114,214,1}; radixSort(arr); System.out.println(Arrays.toString(arr)); } public stat ...
快速排序
快速排序分析1.先从数列中取出一个数作为基准数。
2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。
3.再对左右区间重复第二步,直到各区间只有一个数。
代码
双向划分(最基础版)
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849package 算法;public class 快速排序 { public static void main(String[] args) { int[] arr = new int[]{-9,78,0,23,-567,70}; quickSort(arr, 0, arr.length-1); for (int i : arr) { System.out.println(i); } } public static void quick ...
插入排序
插入排序分析
遍历 len-1 次
每次将第i个插入数组,并判断与当前最前面的数的大小。
代码123456789101112131415161718192021package 算法;public class 插入排序 { public static void main(String[] args) { int[] arr = new int[]{101,34,119,1}; for(int i = 1;i<arr.length;i++){ int index = i; int num = arr[i]; for (int j = i-1; j >= 0 ; j--) { if(num<arr[j]){ arr[index] = arr[j]; index = j; ...
选择排序
选择排序分析
遍历 len-1 次
每次选择出最小的值放在前面
代码12345678910111213141516171819202122232425package 算法;public class 选择排序 { public static void main(String[] args) { int[] arr = new int[]{101,34,119,1}; int min,minIndex; for (int i = 0; i < arr.length-1; i++) { min = arr[i]; minIndex = i; for (int j = i+1; j < arr.length; j++) { if(arr[j]<min){ min = arr[j]; ...
冒泡排序
冒泡排序分析
代码1234567891011121314151617181920212223242526package 算法;public class 冒泡排序 { public static void main(String[] args) { int[] arr = new int[]{3,9,-1,10,20}; int len = arr.length; boolean flag = true; for (int i = 0; i < len-1; i++) { flag = true; for (int j = i+1; j < len-1-i; j++) { if(arr[i]>arr[j]){ int temp = arr[i]; arr[i] = arr[j]; ...