常见数据结构算法知识

1. 各类排序算法

public void bubbleSort(int [] input) {
    boolean flag = false;
    int temp;    

    for (int i = 0;i < input.length;i ++) {
        flag = false;
        for (int j = 0;j < input.length - 1 - i;j ++) {
            if (input[j] < input[j + 1]) {
                temp = input[j];
                input[j] = input[j + 1];
                input[j + 1] = temp;
                flag = true;                
            }
        }
        if (flag == false) {
            return;
        }
    }
}
View Code
public int getMid(int [] list, int low, int high) {
    int temp = list[low];
    while (low < high) {
        while (low < high && list[high] > temp) {
            high --;
        }
        list[low] = list[high];
        while(low < high && list[low] < temp) {
            low ++;
        }
        list[high] = list[low];
    }
    list[low] = temp;
    return low;
}
public void quickSort(int [] list, int low, int high) {
    if (low < high) {
        int middle = getMid(list, low, high);
        quickSort(list, low, mid - 1);
        quickSort(list, mid + 1, high);
    }
}
View Code
public void merge(int []a, int low, int mid, int high) {
    int []tmp = new int[high - low + 1];
    int i = low;
    int j = mid + 1;
    int k = 0;
    
    while (i <= mid || j <= high) {
        if (i <= mid && j <= high) {
            if (a[i] < a[j]) {
                tmp[k ++] = a[i ++];
            } else {
                tmp[k ++] = a[j ++];    
            }
        } else if (i <= mid) {
            tmp[k ++] = a[i ++];
        } else {
            tmp[k ++] = a[j ++];
        }
    }
    k = 0;
    for (k < tmp.length;k ++) {
        a[low + k] = tmp[k];
    }
}

public void mergeSort(int []a, int low, int high) {
    int mid = (low +high) / 2;
    mergeSort(a, low, mid);
    mergeSort(a, mid + 1, high);
    merge(a, low, mid, high);
}
View Code

猜你喜欢

转载自www.cnblogs.com/lcmichelle/p/12750014.html