排序算法-后续补充

便于自己复习和查阅,特记录一下。

1.冒泡排序(升序)

思路:每一轮将连续两个数比较大小,如果后面的大于前一个,进行交换,每一轮冒泡均能找到一个最大的值;

     然后,比较的轮数是length-1-i,解释如下:每一轮产生的最大的都是固定的,所以要减去已经有序的个数,-1的意思是,i只循环到最后一个的前一个,与后一个进行比较就行了

 1    public static void bubbleSort(int[] array) {//冒泡排序
 2         int temp;
 3         for (int i = 0; i < array.length; i++) {//轮数
 4             for (int j = 0; j < array.length - i - 1; j++) {//每一轮比较的个数
 5                 if (array[j] > array[j + 1]) {
 6                     temp = array[j + 1];
 7                     array[j + 1] = array[j];
 8                     array[j] = temp;
 9                 }
10             }
11         }
12     }

2.快速排序算法(用递归)

思路:找到一个基准值,一般用第一个值记为key,根据key的大小,将待排序元素分成两组,左边的数都小于key,中间为key,右边的值均大于key;

   用左右数组下标进行查找记i,j,先从后往前找找到第一个小于key的值,将i 对应的值覆盖,然后i++,向后找,找到第一个大于key的值,将j 对应值覆盖,最后找到基准值的为值,将key放入。然后进行递归。

    public static void qucikQuery(int[] array, int left, int right) {//快排  递归实现
        int key = array[left];//用来保存第i个值;
        int i = left;
        int j = right;
        if (left >= right) {
            return;
        }
        while (i < j) {
            while (i < j && array[j] > key)
                j--;
            if (i < j) {//找到第一个大于key的值,进行交换
                array[i] = array[j];
            }
            while (i < j && array[i] < key)
                i++;
            if (i < j) {
                array[j] = array[i];
            }
        }
        array[i] = key;
        qucikQuery(array, left, i - 1);
        qucikQuery(array, i + 1, right);
    }

另一种快速排序

public static void quickSort(int[] a, int left, int right) {
        if (left > right)
            return;
        int pivot = a[left];//定义基准值为数组第一个数
        int i = left;
        int j = right;

        while (i < j) {
            while (pivot <= a[j] && i < j)//从右往左找比基准值小的数
                j--;
            while (pivot >= a[i] && i < j)//从左往右找比基准值大的数
                i++;
            if (i < j)                     //如果i<j,交换它们
            {
                int temp = a[i];
                a[i] = a[j];
                a[j] = temp;
            }
        }
        a[left] = a[i];
        a[i] = pivot;//把基准值放到合适的位置
        quickSort(a, left, i - 1);//对左边的子数组进行快速排序
        quickSort(a, i + 1, right);//对右边的子数组进行快速排序
    }

后续,会继续补充。

一切美好的都是值得等待的。
原文地址:https://www.cnblogs.com/minghua-b/p/9537639.html