Android 算法面試題

冒泡排序:

重複地走訪過要排序的數列,每次比較相鄰兩個元素,如果它們的順序錯誤就把它們交換過來,越大的元素會經由交換慢慢“浮”到數列的尾端。

for(int i=0;i<list.length;i++){
    for(int j=i+1;j<list.length;j++){
        if(list[i]>list[j]){
            int temp=list[i];
            list[i]=list[j];
            list[j]=temp;
        }
    }
}

 

快速排序:在待排序的數組選取一個元素作爲基準,將待排序的元素進行分區,比基準元素大的元素放在一邊,比其小的放另一邊,遞歸調用快速排序對兩邊的元素排序。選取基準元素並分區的過程採用雙指針左右交換。

void quickSort(int[] arr,int start,int end){
    if(end<=start)
        return;
    int standard = arr[start];//選取第一個數做中間值
    int low = start,high = end;//低位指針和高位指針
    while(low<high){
        while(low<high&&standard<=arr[high])//從高位開始,選取比中間值小的元素
            high--;
        arr[low] = arr[high];//找到後退出循環,將小的賦值給低位元素
        while(low<high&&standard>=arr[low])//從低位開始,找比中間值大的元素
            low++;
        arr[high]=arr[low];//找到了,將大的元素放到high的位置處
    }
    arr[low]=standard;//這兒low==high,標準值放在low/high處,左邊都是小的,右邊都是大的
    quickSort(arr,start,low-1);//左邊的再快速排序
    quickSort(arr,low+1,end);//右邊的快速排序
}

 

歸併排序:

分解待排序的數組成兩個各具 n/2 個元素的子數組,遞歸調用歸併排序兩個子數組,合併兩個已排序的子數組成一個已排序的數組。

public void mergeSort(int[] arr) {
    int[] temp = new int[arr.length];
    mergeSort(arr, temp, 0, arr.length - 1);
}

private void mergeSort(int[] arr, int[] temp, int left, int right) {
    // 當left == right時,不需要再劃分
    if (left < right) {
        int mid = (left + right) / 2;
        internalMergeSort(arr, temp, left, mid);
        internalMergeSort(arr, temp, mid + 1, right);
        mergeSortedArray(arr, temp, left, mid, right);
    }
}

// 合併兩個有序子序列
public void mergeSortedArray(int[] arr, int[] temp, int left, int mid, int right) {
    int i = left;
    int j = mid + 1;
    int k = 0;
    while (i <= mid && j <= right) {
        temp[k++] = arr[i] < arr[j] ? arr[i++] : arr[j++];
    }
    while (i <= mid) {
        temp[k++] = arr[i++];
    }
    while (j <= right) {
        temp[k++] = arr[j++];
    }
    // 把temp數據複製回原數組
    for (i = 0; i < k; i++) {
        arr[left + i] = temp[i];
    }
}

二叉樹

class TreeNode {
    public TreeNode left, right;
    public int val;

    public TreeNode(int val) {
        this.val = val;
    }
}


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章