本文主要介紹一些常用的算法:
冒泡排序:兩兩相互之間進行比較,如果符合條件就相互兌換。
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 }
運行結果,自己操作就可以了
以上便是個人對一些簡單算法的見解。