zoukankan      html  css  js  c++  java
  • 算法 快速排序

    方法:选择一个基准元素,将小于基准元素的放左边,大于基准元素的放右边。递归调用。

    基准元素可以选择中间也可以选择两边的,这并没有什么影响,因为本身就是无序的

    每次递归直观感受就是使得基准元素找到自己位置不再发生改变

    //array要排序的数组
    //head要排序的第一个index
    //tail要排序的最后一个index
    private
    static void quikSort(int[] array, int head, int tail) {
         //终止条件1,array==null或者为长度为0的时候直接return
    //终止条件2,head和tail之间没有多余元素的时候代表已经排序完成
         
    if (tail <= head || array == null || array.length <= 1) { return; }
    //选择中间位置元素作为基准元素,只有有个基准元素就行,不非得去(tail+head)/2 ,head或者tail都可以
    //但是目测选择中间元素,挪动的次数会少一些?这有待求证
    int pvoitIndex = (tail + head) / 2;
    int pvoit = array[pvoitIndex]; int start = head; int end = tail; while (start < end) {
    //停止在左边第一个大于基准元素的index
    while (array[start] < pvoit) { ++start; }
           //停止在右边第一个基准元素的idex
    while (array[end] > pvoit) { --end; }
           //swag交换位置
    if (start < end) { int tmp = array[start]; array[start] = array[end]; array[end] = tmp; ++start; --end; } else if (start == end) { ++start; } }
    //递归 quikSort(array, head, end); quikSort(array, start, tail); }
  • 相关阅读:
    编译原理学习导论-作者四川大学唐良(转)初学者必看
    Ajax在chrome浏览器中测试调用失败解决办法
    sublime中输入法输入框只能在一个位置
    第三次作业
    第二次作业
    第一次作业
    2018年 大一下学期第零次作业
    14,15周作业
    第七周作业
    第六周作业
  • 原文地址:https://www.cnblogs.com/xiangtingsulinlin/p/9343035.html
Copyright © 2011-2022 走看看