【演算法與資料結構】經典排序演算法總結

Colin_Mindset發表於2018-10-03

1. 氣泡排序

在這裡插入圖片描述
時間複雜度:o(n2)
過程:
一開始交換的區間是0-(N-1),也就是整個陣列的整體;然後第一個數與第二個數進行比較,哪個大,哪個就放在後面;然後第二個數與第三個數進行比較,哪個大,哪個就放在後面;這樣依次交換下去,最大的數就被放到了最後;然後把互動區間從0-(N-1),變為0-(N-2),這樣第二大的數就被放到陣列倒數第二的位置;這個過程進行下去,直到區間就只有一個數;這樣陣列就變成了有序資料。

import java.util.*;

public class BubbleSort {
    public int[] bubbleSort(int[] A, int n) {
        for(int i=n-1;i>0;i--) {
            for(int j=0;j<i;j++) {
                if(A[j+1]<A[j]){
                    int t = A[j];
                    A[j] = A[j+1];
                    A[j+1] = t;
                }   
            }
        }
        return A;
    }
}

2. 選擇排序

在這裡插入圖片描述
時間複雜度:o(n2)
過程:
一開始在整個陣列上,也就是區間0-(N-1)上,選出一個最小值,把它放到位置0上;然後在區間1-(N-1)上,選出一個最小值,把它放到位置1上;這樣依次縮小範圍,直到區間內只有一個元素,那這個陣列就變得有序了。

import java.util.*;

public class SelectionSort {
    public int[] selectionSort(int[] A, int n) {
        for(int i = 0; i<n; i ++) {
            for(int j = i + 1; j< n; j++) {
                if(A[i] > A[j]) {
                    int t = A[i];
                    A[i] = A[j];
                    A[j] = t;
                }
            }
        }
        return A;
    }
}

3. 插入排序

在這裡插入圖片描述
時間複雜度:o(n2)
過程:
首先位置1上的數跟位置0上的數進行比較,如果位置1上的數更小,那位置0上的數就向前移,把位置1上的數放到位置0上;接著位置2上的數跟位置1上的數進行比較,如果比位置1上的數小,那位置1上的數向前移,接著跟位置0上的數進行比較,如果比位置0上的數小,那位置0上的數接著向前移,然後把位置2上的數放到位置0上;那麼對於位置k上的數,就一直跟前面的數進行比較並向前移,直到小於等於它,並把位置k上的數放到這個位置。

import java.util.*;

public class InsertionSort {
    public int[] insertionSort(int[] A, int n) {
        // write code here
        for(int i=1;i<n;i++) {
            int current = A[i];
            for(int j=i-1;j>=0;j--) {
                if(current >=A[j]) {
                    break;
                }else{
                    A[j+1] = A[j];
                    A[j]=current;
                }
            }
        }
        return A;
    }
}

相關文章