Skip to content

Latest commit

 

History

History
95 lines (84 loc) · 2.26 KB

File metadata and controls

95 lines (84 loc) · 2.26 KB
public void bubbleSort(int[] arr) {
    for (int i = 0; i < arr.length - 1; i++) {
        for (int j = 0; j < arr.length - 1 - i; j++) {
            if (arr[j] > arr[j + 1]) {
                swap(arr, j, j + 1);
            }
        }
    }
}

public void selectionSort(int[] arr) {
    for (int i = 0; i < arr.length; i++) {
        int minIndex = i;
        for (int j = i + 1; j < arr.length; j++) {
            if (arr[minIndex] > arr[j]) {
                minIndex = j;
            }
        }
        swap(arr, i, minIndex);
    }
}

public void insertionSort(int[] arr) {
    for (int i = 1; i < arr.length; i++) {
        int curNum = arr[i];
        int curIndex = i - 1;
        while (curIndex >= 0 && arr[curIndex] > curNum) {
            arr[curIndex + 1] = arr[curIndex];
            curIndex--;
        }
        arr[curIndex + 1] = curNum;
    }
}

private void quickSort(int[] arr, int start, int end) {
    if (start >= end) {
        return;
    }
    int left = start;
    int right = end;
    int cur = arr[start];

    while (left < right) {
        while (cur <= arr[right] && left < right) {
            right--;
        }
        while (cur >= arr[left] && left < right) {
            left++;
        }
        swap(arr, left, right);

    }
    swap(arr, start, left);
    quickSort(arr, start, left - 1);
    quickSort(arr, left + 1, end);
}

public void mergeSort(int[] arr, int start, int end) {
    int[] result = new int[arr.length];

    if (start >= end) {
        return;
    }

    int mid = start + (end - start) / 2;
    int start1 = start;
    int end1 = mid;
    int start2 = mid + 1;
    int end2 = end;
    mergeSort(arr, start1, end1);
    mergeSort(arr, start2, end2);

    int k = start;
    while (start1 <= end1 && start2 <= end2) {
        result[k++] = arr[start1] < arr[start2] ? 
            arr[start1++] : arr[start2++];
    }
    while (start1 <= end1) {
        result[k++] = arr[start1++];
    }
    while (start2 <= end2) {
        result[k++] = arr[start2++];
    }
    for (int i = start; i <= end; i++)
        arr[i] = result[i];
}

private void swap(int[] arr, int i, int j) {
    int temp = arr[j];
    arr[j] = arr[i];
    arr[i] = temp;
}