本文主要介绍一些常用的算法:
冒泡排序:两两相互之间进行比较,如果符合条件就相互兑换。
1 //冒泡排序升序 2 public static int[] bubblingSortAsc(int[] array){ 3 if (array.length==0) 4 return array; 5 for (int i=0;i<array.length;i++){ 6 for (int j=i+1;j<array.length;j++){ 7 int temp; 8 if (array[i]>array[j]){ 9 temp = array[i]; 10 array[i]=array[j]; 11 array[j]=temp; 12 } 13 } 14 } 15 return array; 16 }
运行结果:
简单插入排序:例如,将数组进行升序,遍历数组,取出i+1,和(i+1)之前的每一项进行对比,直到(i+1)的数据大于比较的数据。
1 //简单插入排序 2 public static int[] insertSortAsc(int[] array){ 3 if (array.length==0) 4 return array; 5 int currentValue; 6 7 for (int i=0;i<array.length-1;i++){ 8 int pre = i; 9 currentValue = array[pre+1]; //取出当前遍历的后一位 10 11 //把当前位置之前的每一项都进行对比 12 while (pre>=0 && currentValue<array[pre]){ 13 array[pre+1] = array[pre]; 14 pre--; 15 } 16 17 array[pre+1] = currentValue; 18 19 } 20 return array; 21 }
运行结果:
归并排序:把一个数组一直拆分,直到符合数组定义的数据。然后比较,比较完之后再和其他的进行比较,然后在一层一层的比较。
1 public static int[] sort(int[] array){ 2 final int len = 5;//默认最小的数组长度为5 3 if (array.length<=len) { 4 return insertSortAsc(array);//对数组进行正序排序 5 }else { 6 int mid = array.length / 2; 7 int[] left = Arrays.copyOfRange(array, 0, mid); 8 int[] right = Arrays.copyOfRange(array, mid, array.length); 9 return compare(sort(left),sort(right)); 10 } 11 } 12 13 public static int[] compare(int[] left,int[] right){ 14 int[] result = new int[left.length+right.length]; 15 for (int i=0,l=0,r=0;i<result.length;i++){ 16 if (l>=left.length)//当left集合取不到数据的时候,直接从right集合拿数据 17 result[i] = right[r++]; 18 else if (r>=right.length) //当right集合取不到数据的时候,直接从left集合取数据 19 result[i] = left[l++]; 20 else if (left[l]>right[r]) //当left集合的数据大于right集合的数据,去right集合的数据 21 result[i] = right[r++]; 22 else //都不符合就直接取right集合数据 23 result[i] = left[l++]; 24 } 25 return result; 26 }
运行结果,自己操作就可以了
以上便是个人对一些简单算法的见解。