Java基础:常见算法(排序算法)

1.冒泡排序

// bubbling sort
        int[] arr = {14,23,7,35,12,3,46};
        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]){
                    int temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;
                }
            }
        }
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i] + " ");
        }

2.选择排序

// selection sort
        int[] arr = {14,23,7,35,12,3,46};
        for (int i = 0; i < arr.length - 1; i++) {
            for (int j = 1 + i; j < arr.length; j++) {
                if (arr[i] > arr[j]){
                    int temp = arr[i];
                    arr[i] = arr[j];
                    arr[j] = temp;
                }
            }
        }
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i] + " ");
        }

3.插入排序

int[] arr = {3,44,38,5,47,15,36,26,27,2,46,4,19,50,48};
        int NIndex = 0;
        for (int i = 0; i < arr.length; i++) {
            if (arr[i] <= arr[i + 1]){
                NIndex = i + 1;
            }else {
                break;
            }
        }
        System.out.println(NIndex);

        for (int i = NIndex + 1; i < arr.length; i++) {
            int a = 0;
            for (int j = i - 1; j >= 0; j--) {
                if (arr[i - a] >= arr[j]){
                    break;
                }else {
                    int temp = arr[j];
                    arr[j] = arr[i - a];
                    arr[i - a] = temp;
                    a++;
                }
            }
        }
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i] + " ");
        }

4.快速排序

4.1递归

4.2递归练习

// 递归
    public static void main(String[] args) {
        int num = 5;
        int factorial = getFactorial(num);
        System.out.println(factorial);
    }

    private static int getFactorial(int num) {
        if (num == 1){
            return 1;
        }else {
            return num * getFactorial(num - 1);
        }
    }

递归就是不断调用方法一层层的进栈, 然后通过出口再将值赋给前一个方法, 一层层的出栈得到最终的结果的.

4.3快速排序

扫描二维码关注公众号,回复: 15136115 查看本文章

注意: 

1.必须先移动右边的指针, 因为只有这样才能保证与基准数交换的数字是比基准数小的, 这样才能保证左边的数都比基准数小, 右边的数都比基准数大. 

2.左边的指针需要从起始位置开始, 也就是基准数位置, 不然可能会存在j = i+1时不交换的情况.

public static void main(String[] args) {
        int[] arr = {6,2,1,7,9,3,4,5,10,8};
        quickSort(arr, 0, arr.length - 1);

        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i] + " ");
        }
    }

    private static void quickSort(int[] arr, int i, int j) {
        int start = i;
        int end = j;

        if (start > end){
            return;
        }

        int baseNumber = arr[i];

        while (start != end){
            while (true){
                if (end <= start || arr[end] < baseNumber){
                    break;
                }
                end--;
            }

            while (true){
                if (end <= start || arr[start] > baseNumber){
                    break;
                }
                start++;
            }

            int temp = arr[start];
            arr[start] = arr[end];
            arr[end] = temp;
        }
        int temp = arr[i];
        arr[i] = arr[end];
        arr[end] = temp;

        quickSort(arr, i, start - 1);

        quickSort(arr, start + 1, j);
    }

猜你喜欢

转载自blog.csdn.net/Orange_sparkle/article/details/129302227