美文网首页
常见的排序算法(2)

常见的排序算法(2)

作者: 农民工进城 | 来源:发表于2019-04-29 16:36 被阅读0次

要点

  • 快速排序
  • 归并排序

1.快速排序

    
    public static void quickSort(int[] arr, int left, int right) {
        if (left < right) {
            int p = partition(arr, left, right);
            quickSort(arr, 0, p);
            quickSort(arr, p + 1, right);
        }

    }

    /**
     * 来回倒腾
     * @param arr
     * @param low
     * @param high
     * @return
     */
    private static int partition(int[] arr, int low, int high) {
        int left = low;
        int right = high;
        int target = arr[low];
        while (left < right) {
            while (arr[right] > =target && right > left) {
                right--;
            }
                        int temp=arr[left];
            arr[left]=arr[right];
            while (arr[left] < target && left < right) {
                left++;
            }
            arr[right]=temp;
        }
        arr[left]=target;
        return left;
    }

2.归并排序

public static void mergeSort(int[] arr) {
        sort(arr, 2, 5);
    }

    public static void sort(int[] arr, int low, int high) {
        if (low < high) {
            int mid = (low + high) / 2;
            sort(arr, low, mid);
            sort(arr, mid + 1, high);
            // 左右归并
            merge(arr, low, mid, high);
        }
    }

    public static void merge(int[] arr, int left, int mid, int right) {
        int[] tmp = new int[right-left+1];// 辅助数组
        int p1 = left, p2 = mid + 1, k = left;// p1、p2是检测指针,k是存放指针
        while (p1 <= mid && p2 <= right) {
            if (arr[p1] <= arr[p2]) {
                tmp[k++] = arr[p1++];
            } else {
                tmp[k++] = arr[p2++];
            }
        }

        while (p1 <= mid) {
            tmp[k++] = arr[p1++];// 如果第一个序列未检测完,直接将后面所有元素加到合并的序列中
        }
        while (p2 <= right) {
            tmp[k++] = arr[p2++];// 同上
        }

        // 复制回原素组
        for (int i = 0; i <= tmp.length; i++) {
            arr[left+i] = tmp[i];
        }

    }

相关文章

  • 常用排序算法实现

    1、常见排序算法大致有以下几种:冒泡排序、选择排序、插入排序、希尔排序、归并排序、快速排序、堆排序2、各种排序算法...

  • LeetCode大全

    1.常见排序算法: 常见的排序算法:冒泡排序、选择排序、插入排序、归并排序、快速排序、希尔排序、堆排序、计数排序、...

  • 数据结构与算法

    常见排序算法 堆排序 算法大全 算法大汇总

  • 算法与数据结构-排序(3)

    常见排序算法 算法平均时间复杂度原地排序稳定排序插入排序O(n^2) ,有序情况 -> O(n)TrueTrue快...

  • 排序算法

    常见的排序算法 常见的排序算法有:插入、希尔、选择、冒泡、归并、快速、堆排序。。。 插入排序 算法步骤一、从数组的...

  • Python知识点:常见算法的python实现

    提到排序算法,常见的有如下几种:冒泡排序、选择排序、插入排序、快速排序、堆排序、归并排序、希尔排序;查找算法最常见...

  • Sort Algorithm

    排序算法 首先要讨论的是O(n^2)的算法。主要有冒泡排序,选择排序,插入排序。冒泡排序比较常见这里不细说。 ①选...

  • Rust数据结构——排序算法(一)

    Rust数据结构——排序算法(一) 0x01 常见的排序算法 排序算法是数据结构中很常见的算法。如果你了解过数据结...

  • 排序算法(四) 希尔排序(插入排序的进化)

    参考Java排序算法(四):希尔排序常见排序算法 - 希尔排序 (Shell Sort) 希尔排序算法是按其设计者...

  • 排序算法

    排序算法 排序是最基本的算法之一,常见的排序算法有插入排序、希尔排序、选择排序、冒泡排序、堆排序、归并排序及快速排...

网友评论

      本文标题:常见的排序算法(2)

      本文链接:https://www.haomeiwen.com/subject/pgtunqtx.html