经典排序-快速排序(交换优化)

转载 2018年04月15日 21:18:46

以下对啊哈算法中,作者对多次交换优化的方面做了阐述:
1、代码的核心是 一定一定要从右边先开始,因为在最后结束的时候代码的判定是将左侧的下表为i的数据移到原本的基准下表处,也就是start;
2、同时if的排定条件一定是 < 用来交换排序的两个数,如果是 <=那么会在最后一个相遇的时候,出现不必要的操作;
3、为什么不查到一次就交换一次呢?
因为:你会发现在左右各进行了一次交换操作的时候,对原本基准点的操作等同于没有进行修改,故而优化一次写入,加快运行速度

package jvm;

public class fastsort {
    static int[] a = {1,54,6324,4312,12,21}; 
    public static void sort(int start, int end) {
        if(start > end)
            return;
//      存取一个基准数
        int temp = a[start];
        int i = start ;
        int j = end;
        while(i != j ) {
//          一定要先从右往左开始 ,否则会发生数组越界,为的是处理最后相遇的情况判断
            while(a[j] >= temp && i<j) j--;
            while(a[i] <= temp && i<j) i++;
//          如果没有相遇那么就要交换2个否则就只是换基准数和当前相遇位置
            if(i < j) {
                int mem = a[j];
                a[j] = a[i];
                a[i] = mem;
            }

            a[start] = a[i];
            a[i] = temp;
//          基准数不要在动了
            sort(start, i-1);
            sort(i+1, end);
        }
    }
}

八大排序--交换排序 之 快速排序

快速排序
  • csdn_chb
  • csdn_chb
  • 2016-11-22 15:39:40
  • 401

快速排序两种方式实现及优化总结

今天看了快速排序,现在对自己的已知的方法进行总结,欢迎拍砖。         快速排序被认为是20世纪十大算法之一,在排序中,快速排序其实就是我们前面认为最慢的冒泡排序的升级,它们都属于交换排序类...
  • qq_29027865
  • qq_29027865
  • 2016-09-26 20:01:20
  • 1789

快速排序及优化(Java版)

快速排序(Quicksort)是对冒泡排序的一种改进。快速排序由C. A. R. Hoare在1962年提出。 一次快速排序详细过程: 选择数组第一个值作为枢轴值。 代码实现:package Q...
  • scgaliguodong123_
  • scgaliguodong123_
  • 2015-06-12 20:56:36
  • 3238

【排序三】交换排序(冒泡排序&&快速排序)

【排序一】插入排序(直接插入排序&&希尔排序) 【排序二】选择排序(选择排序&&堆排序) 一、冒泡排序 1、基本思想     冒泡排序(Bubble Sort,台湾译为:泡沫排序或气泡排序)是一种简...
  • snow_5288
  • snow_5288
  • 2017-03-04 21:45:07
  • 2648

快速排序,“两头交换”法 ,实现

#include #include void ksort(int a[],int low,int high)//low high 为目标排序序列的起始位,结束位 {   i...
  • txl16211
  • txl16211
  • 2014-06-16 20:59:04
  • 1225

交换类排序-快速排序

#include #define N 20 int main() { void QickSort(int *,int ,int); int i,a[N]; printf("En...
  • nyist327
  • nyist327
  • 2014-04-16 17:57:06
  • 516

快速排序算法实施尾递归优化

昨晚面试官问如何从递归方面优化快排效率时提到了尾递归的优化,今天查了一下,长知识了。 void quickSort(SqList * list , int low ,int high) { ...
  • gtzh110
  • gtzh110
  • 2015-09-25 11:13:01
  • 1774

快速排序的划分算法的总结和思考

关于快速排序,它的关键点就在于划分算法,基本上有两种思路。 第一种是算法导论的解法,这种比较好理解,搜索一遍,找到比r小的元素然后调换位置, 并且i++。 第2种思路就比较难理解一...
  • a342500329a
  • a342500329a
  • 2016-04-10 20:05:52
  • 895

快速排序及优化(三路划分等)

快速排序, 是最经典的排序算法之一。快速排序拥有良好的时间复杂度,平均为O(nlog2n)O(nlog_{2}n),最差为O(n2)O(n^2)。在这里,我们不妨略略深入讨论一下快速排序:时间复杂度分...
  • puppylpg
  • puppylpg
  • 2017-04-19 00:36:02
  • 2026

交换类排序——快速排序

1、算法思想: 从待排序记录序列中选取一个记录(通常选取第一个记录)为枢轴,其关键字设为K1然后将其余关键字小于k1的记录移到前面而将关键字大于或等于k1的记录移到后面,结果将待排序记录序列分为两个...
  • Din_Lei
  • Din_Lei
  • 2018-01-16 20:13:41
  • 39
收藏助手
不良信息举报
您举报文章:经典排序-快速排序(交换优化)
举报原因:
原因补充:

(最多只允许输入30个字)