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

    快速排序算法总结

    一、思想
    举例说明:对数组[2,4,9,3,6,7,1,5]进行快速排序

    步骤1: 首先用2当作基准,使用i j两个指针分别从两边进行扫描,把比2小的元素和比2大的元素分开

    2 2 4 9 3 6 7 1 5 首先比较2和5,5比2大,j左移

    2 2 4 9 3 6 7 1 5 比较2和1,1小于2,所以把1放在2的位置

    2 1 4 9 3 6 7 1 5 比较2和4,4大于2,因此将4移动到后面

    2 1 4 9 3 6 7 4 5 比较2和7,2和6,2和3,2和9,全部大于2,满足条件,因此不变

    经过第一轮的快速排序,元素变为下面的样子

    [1] 2 [4 9 3 6 7 5]

    步骤2: 分别递归排序2左边和右边的序列

    思想提炼:

    • 1.将数组a第一个元素设为key,i指向数组第一个元素,j指向数组最后一个元素
    • 2.从右向左直到找到比key小的元素j,将j的数组值赋给i的数组值:a[i] = a[j]
    • 3.从做向右直到找到比key大的元素i,将i的数组值赋给j的数组值:a[j] = a[i]
    • 4.a[i] = key,此时数组a被划分为3块:比a[i]小的字数组,a[i],比a[i]大的字数组
    • 5.分别递归i左边和右边的字数组

    二、代码

     1 public  void sort(int[] a,int left,int right){
     2     if(left >= right)
     3         return;
     4     int key = a[left], i = left, j = right;
     5        while (i < j){
     6            while (i < j && a[j] >= key)
     7                   j--;
     8            a[i] = a[j];
     9            while (i < j && a[i] <= key)
    10             i++;
    11            a[j] = a[i];
    12        }
    13        a[i] = key;
    14        sort(a, left, i - 1);
    15        sort(a, i + 1, right);
    16 }

    三、性能   
      1.快速排序是不稳定的算法  
      2.快速排序交换次数较多   
      3.快速排序的最坏时间为O(n2),但就平均性能而言,它是基于关键字比较的内部排序算法中速度最快者,它的平均时间复杂度为O(nlgn)。

  • 相关阅读:
    apache 修改文件上传大小限制
    linux 桥接模式下 固定ip 设置
    简易 红包生成
    Sublime Text 3 快捷键
    excle 文件的导入和导出
    php 下载文件
    右则css 小浮条
    html 自动跳转页面
    Media Queries详细
    mobile响应式页面meta信息相关记录
  • 原文地址:https://www.cnblogs.com/wanwusheng/p/6038328.html
Copyright © 2011-2022 走看看