Skip to content

【0097_Week07】学习总结 #1270

Description

@JiangJiang77

/**
* 选择排序
*
* @param arr
*/
public void selectSort(int[] arr) {
if (arr.length == 0) return;
int maxIndex;
for (int i = 0; i < arr.length; i++) {
maxIndex = i;
for (int j = i + 1; j < arr.length - i; i++) {
if (arr[j] > arr[maxIndex]) {
maxIndex = j;
}
}
int tmp = arr[arr.length - i];
arr[arr.length - i] = arr[maxIndex];
arr[maxIndex] = tmp;
}
}

/**
 * 插入排序
 *
 * @param arr
 */
public void insertSort(int[] arr) {
    if (arr.length <= 1) return;
    for (int i = 1; i < arr.length; i++) {
        int preIndex = i - 1, current = arr[i];
        while (preIndex >= 0 && arr[preIndex] > current) {
            arr[preIndex + 1] = arr[preIndex];
            preIndex--;
        }
        arr[preIndex + 1] = current;
    }
}

/**
 * 冒泡排序
 *
 * @param arr
 */
public void bubbleSort(int[] arr) {
    if (arr.length == 0) return;
    for (int i = 0; i < arr.length; i++) {
        for (int j = i + 1; j < arr.length; j++) {
            if (arr[i] > arr[j]) {
                int t = arr[i];
                arr[i] = arr[j];
                arr[j] = t;
            }
        }
    }
}

/**
 * 快速排序
 *
 * @param arr
 * @param begin
 * @param end
 */
public void quickSort(int[] arr, int begin, int end) {
    if (begin >= end) return;
    int pivot = partition(arr, begin, end);
    quickSort(arr, begin, pivot - 1);
    quickSort(arr, pivot + 1, end);

}

public int partition(int[] arr, int begin, int end) {
    int pivot = end, count = begin;
    for (int i = begin; i < end; i++) {
        if (arr[i] < arr[pivot]) {
            int tmp = arr[i];
            arr[i] = arr[count];
            arr[count] = tmp;
            count++;
        }
    }
    int tmp = arr[pivot];
    arr[pivot] = arr[count];
    arr[count] = tmp;
    return count;
}

/**
 * 归并排序
 *
 * @param arr
 * @param left
 * @param right
 */
public void mergeSort(int[] arr, int left, int right) {
    if (arr.length <= 1) return;
    if (right <= left) return;
    int mid = (left + right) >> 1;
    mergeSort(arr, left, mid);
    mergeSort(arr, mid + 1, right);
    merge(arr, left, mid, right);
}

/**
 * 归并排序的合并
 *
 * @param arr
 * @param left
 * @param mid
 * @param right
 */
public void merge(int[] arr, int left, int mid, int right) {
    int[] temp = new int[right - left + 1];
    int i = left, j = mid + 1, 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[k++];
    for (int t = 0; t < temp.length; t++) {
        arr[left + t] = temp[t];
    }
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions