演算法面試題(二)
初級
1package test;
2public class Test6 {
3
4 public static void main(String[] args) {
5 int[]arr=new int[]{15,2,21,6,4,25,77,43};
6 int[] maoPao = maoPao(arr);
7 for (int i : maoPao) {
8 System.out.print(i+" ");
9 }
10 }
11
12 /**
13 * 氣泡排序方法
14 * @param arr 要排序的陣列
15 * @return 排序之後的陣列
16 */
17 public static int[] maoPao(int[] arr){
18 //前一個元素
19 for (int i = 0; i < arr.length-1; i++) {
20 //後一個元素
21 for (int j = i+1; j < arr.length; j++) {
22 //如果後面的元素小於前邊的元素,互換位置
23 if(arr[j]<arr[i]){
24 int temp=arr[i];
25 arr[i] = arr[j];
26 arr[j] = temp;
27 }
28 }
29 }
30 return arr;
31 }
32}
優化級
1package test;
2
3 public class Test6 {
4
5 public static void main(String[] args) {
6
7 int[]arr=new int[]{15,2,21,6,4,25,77,43};
8
9 int[] maoPao2 = maoPao2(arr);
10 for (int i : maoPao2) {
11 System.out.print(i+" ");
12 }
13 }
14
15 /**
16 * 如果陣列已經排序好了,i只執行一次迴圈
17 * @param arr
18 * @return
19 */
20 public static int[] maoPao2(int[] arr){
21 if(arr==null)
22 return null;
23
24 boolean isSort;
25 Long start = System.currentTimeMillis();
26 for (int i = 0; i < arr.length; i++) {
27 isSort=true;
28 for (int j = 1; j < arr.length-i; j++) {
29 if(arr[j-1]>arr[j]){
30 int temp=arr[j-1];
31 arr[j-1] = arr[j];
32 arr[j] = temp;
33 isSort=false;
34 }
35 }
36
37 Long end = System.currentTimeMillis();
38 if(isSort)
39 System.out.println("用時:"+(end-start));
40 break;
41 }
42 return arr;
43 }
44 }
高逼格的程式碼
介面:
1import java.util.Comparator;
2/**
3 * 排序器介面(策略模式: 將演算法封裝到具有共同介面的獨立的類中使得它們可以相互替換)
4 */
5public interface Sorter {
6 /**
7 * 排序
8 * @param list 待排序的陣列
9 */
10 public <T extends Comparable<T>> void sort(T[] list);
11 /**
12 * 排序
13 * @param list 待排序的陣列
14 * @param comp 比較兩個物件的比較器
15 */
16 public <T> void sort(T[] list, Comparator<T> comp);
17}
實現類:
1import java.util.Comparator;
2/**
3 * 氣泡排序
4 *
5 */
6public class BubbleSorter implements Sorter {
7 @Override
8 public <T extends Comparable<T>> void sort(T[] list) {
9 boolean swapped = true;
10 for (int i = 1, len = list.length; i < len && swapped; ++i) {
11 swapped = false;
12 for (int j = 0; j < len - i; ++j) {
13 if (list[j].compareTo(list[j + 1]) > 0) {
14 T temp = list[j];
15 list[j] = list[j + 1];
16 list[j + 1] = temp;
17 swapped = true;
18 }
19 }
20 }
21 }
22 @Override
23 public <T> void sort(T[] list, Comparator<T> comp) {
24 boolean swapped = true;
25 for (int i = 1, len = list.length; i < len && swapped; ++i) {
26 swapped = false;
27 for (int j = 0; j < len - i; ++j) {
28 if (comp.compare(list[j], list[j + 1]) > 0) {
29 T temp = list[j];
30 list[j] = list[j + 1];
31 list[j + 1] = temp;
32 swapped = true;
33 }
34 }
35 }
36 }
37}
原文釋出時間為:2018-09-14
本文作者:IT技術之道
相關文章
- 經典演算法面試題(二)演算法面試題
- 資料結構和演算法面試題系列—二叉樹面試題彙總資料結構演算法面試題二叉樹
- CSS面試題(二)CSS面試題
- 演算法面試題演算法面試題
- Android 面試常見 - 二分查詢演算法題Android面試演算法
- 面試題隨記二面試題
- iOS 面試題解答二iOS面試題
- php演算法面試題PHP演算法面試題
- 面試演算法題6面試演算法
- 面試演算法題4面試演算法
- 面試演算法題1面試演算法
- 演算法面試題:一演算法面試題
- 幾道和「二叉樹」有關的演算法面試題二叉樹演算法面試題
- [演算法總結] 20 道題搞定 BAT 面試——二叉樹演算法BAT面試二叉樹
- 資料結構和演算法面試題系列—二叉堆資料結構演算法面試題
- 測試面試問題(二)面試
- java初級面試題(二)Java面試題
- iOS面試題總結(二)iOS面試題
- java面試題核心篇(二)Java面試題
- Java常考面試題(二)Java面試題
- 面試演算法題記錄面試演算法
- 二分查詢(JS解法)——高頻面試演算法題(百度真題)JS面試演算法
- Android複習資料——常見面試演算法題彙總(二)Android面試演算法
- 演算法面試:陣列編碼面試問題演算法面試陣列
- 資料結構和演算法面試題系列—二分查詢演算法詳解資料結構演算法面試題
- Java面試題-基礎篇二Java面試題
- 經典Java面試題收集(二)Java面試題
- Java面試題基礎篇(二)Java面試題
- c#面試題及答案(二)C#面試題
- 資料結構和演算法面試題系列—二叉樹基礎資料結構演算法面試題二叉樹
- 面試福利—最強前端面試題(二)(含答案)前端面試題
- google經典演算法面試題-雞蛋問題Go演算法面試題
- Java演算法面試題(009) 毒酒問題Java演算法面試題
- linux基礎練習題、面試題(二)Linux面試題
- 位元組跳動的演算法面試題是什麼難度?(第二彈)演算法面試題
- 面試題7:重建二叉樹面試題二叉樹
- 騰訊前端二面手寫面試題前端面試題
- JDBC常見面試題集錦(二)JDBC面試題