首页 > 编程语言 > 详细

排序算法

时间:2020-08-30 19:39:39      阅读:73      评论:0      收藏:0      [点我收藏+]

快速排序

快速排序采用的思想是分治思想,基本的步骤是首先找出一个元素作为基准,然后将所有元素进行分区操作,达到基准左边的元素都不大于基准值,基准右边的元素都不小于基准值,这样的操作称为一次快排,然后进行递归操作,将基准左边的元素进行快排,将基准右边的元素进行快排,最后达到所有元素有序。
我觉得在编码的时候最主要的操作就是编写一遍快排,也就是将比基准小的都放在左边,反之放在右边。具体的代码如下:

int quicksort(vector<int> &v, int left, int right){
        if(left < right){
                int key = v[left];
                int low = left;
                int high = right;
                while(low < high){
                        while(low < high && v[high] > key){
                                high--;
                        }
                        v[low] = v[high];
                        while(low < high && v[low] < key){
                                low++;
                        }
                        v[high] = v[low];
                }
                v[low] = key;
                quicksort(v,left,low-1);
                quicksort(v,low+1,right);
        }
}

归并排序

归并排序采用的思想也是分治的思想,主要就是将元素分成两个部分,左边进行归并排序,右边进行归并排序,然后将左右两部分进行合并的操作。
编码的时候主要的部分还是合并的操作,主要的代码如下所示:

public class Merge {
    // 不要在 merge 函数里构造新数组了,因为 merge 函数会被多次调用,影响性能
    // 直接一次性构造一个足够大的数组,简洁,高效
    private static Comparable[] aux;

     public static void sort(Comparable[] a) {
        aux = new Comparable[a.length];
        sort(a, 0, a.length - 1);
    }

    private static void sort(Comparable[] a, int lo, int hi) {
        if (lo >= hi) return;
        int mid = lo + (hi - lo) / 2;
        sort(a, lo, mid);
        sort(a, mid + 1, hi);
        merge(a, lo, mid, hi);
    }

    private static void merge(Comparable[] a, int lo, int mid, int hi) {
        int i = lo, j = mid + 1;
        for (int k = lo; k <= hi; k++)
            aux[k] = a[k];
        for (int k = lo; k <= hi; k++) {
            if      (i > mid)              { a[k] = aux[j++]; }
            else if (j > hi)               { a[k] = aux[i++]; }
            else if (less(aux[j], aux[i])) { a[k] = aux[j++]; }
            else                           { a[k] = aux[i++]; }
        }
    }

    private static boolean less(Comparable v, Comparable w) {
        return v.compareTo(w) < 0;
    }
}

排序算法

原文:https://www.cnblogs.com/noob-l/p/13586225.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!