java一些基本算法


本文主要介紹一些常用的算法:

 

冒泡排序:兩兩相互之間進行比較,如果符合條件就相互兌換。    

 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     }

運行結果,自己操作就可以了

 

以上便是個人對一些簡單算法的見解。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM