在算法的實現過程當中是用的ArrayList.從該類的實現方面來看,對算法的執行效率也是有影響的.在這裏僅僅記錄如下本身的學習過程及結果.java
1,快速排序算法
代碼的實現以下,該類是一個測試類方法 quickSortMethod()就是快速排序的實現,他的實現使用的是一個遞歸算法,api
ArrayList的實現是一個數組,並且數組的大小是10,若是元素大於10個就會申請新的空間,大小爲原來的1.5倍, int newCapacity = oldCapacity + (oldCapacity >> 1);從底層的代碼能夠看出他爲了提升效率使用移位來提升效率.數組
爲了進可能的減小arrayList的數據機構的影響,這裏使用foreach遍歷數組.因爲這裏測試的數據比較大,而ArrayLIst的初始大小爲10,並且每次增加爲原來的二倍,讓後把舊的數據複製到新的數組裏面.dom
總之這樣來寫一個算法多少是有些影響的.學習
1 package com.test.sort; 2 3 import java.util.ArrayList; 4 import java.util.Arrays; 5 import java.util.List; 6 7 public class QuickSort { 8 9 public List quickSortMethod(List<Integer> parentList){//quickSort 10 List<Integer> leftList = new ArrayList<Integer>(); 11 List<Integer> rightList = new ArrayList<Integer>(); 12 List<Integer> resultList ; 13 if (parentList.size() <= 1) { 14 return parentList; 15 } 16 Integer qInteger = parentList.get(0); 17 Boolean first = true; 18 for (Integer temp : parentList) { 19 if(first) { 20 first = !first; 21 continue; 22 } 23 if (temp > qInteger) { 24 rightList.add(temp); 25 }else { 26 leftList.add(temp); 27 } 28 29 } 30 resultList = this.quickSortMethod(leftList); 31 resultList.add(qInteger); 32 resultList.addAll(this.quickSortMethod(rightList)); 33 return resultList; 35 } 36 37 public static void main(String[] args) { 38 List<Integer> results; 39 QuickSort qSort = new QuickSort(); 40 List<Integer> list = new ArrayList(); 41 int elemCount = 100000; 42 for(int i = 0; i<elemCount; i++) { 43 list.add((int) (Math.random()*elemCount)); 44 } 45 Long startTime = System.currentTimeMillis(); 46 results = qSort.quickSortMethod(list); 47 Long endTime = System.currentTimeMillis(); 48 Long totalTime = endTime - startTime; 49 System.out.println(startTime); 50 System.out.println(endTime); 51 System.out.println("quick Sort Time = " + totalTime ); 52 //qSort.log(results); 53 54 //bubble Sort 55 startTime = System.currentTimeMillis(); 56 results = qSort.bubbleSort(list); 57 endTime = System.currentTimeMillis(); 58 totalTime = endTime - startTime; 59 System.out.println(startTime); 60 System.out.println(endTime); 61 System.out.println("dubble sort Time = " + totalTime ); 62 //qSort.log(results); 63 } 64 65 66 public List bubbleSort(List<Integer> parentList) { 67 if (parentList == null || parentList.size() == 0) { 68 System.err.println("List isn't elem"); 69 return null; 70 } 71 72 for (int i = 0,listSize = parentList.size(); i < listSize; i++) { 73 for(int j = 0; j < listSize - i - 1; j++){ 74 if (parentList.get(j) > parentList.get(j+1)) { 75 int temp = parentList.get(j); 76 parentList.set(j, parentList.get(j+1)); 77 parentList.set(j+1, temp); 78 } 79 } 80 } 81 return parentList; 82 } 83 84 public void log(List<Integer> parentList){ 85 for (Integer elem: parentList) { 86 System.out.println(elem); 87 } 88 System.out.println("=================================="); 89 } 90 }
2 冒泡排序.測試
冒泡的排序算法 bubbleSort(),這個算法的實現是經過兩層循環來實現的.這個算法ArrayList經過api get來獲得一個元素,foreach代碼會被編譯爲 Iterator 的形式來迭代.當list是數組的時候差異不大.當List的結構是鏈表的時候就差異打了.ui
3 運行結果.this
以上的這些僅僅是學習中的筆記spa