下面简介经典算法  快速排序算法 实现及优化。 (欢迎大家指点,继续提出优化的方法,共同提高)

基本思想:(以按从小到大排序为例说明)通过多次的排序,每次的排序均将要排序的数组分为两部分,前一部分均比中间值小,后一部分均比中间值大,这样重复递归下去将每一部分按相同的思路进行分割,最终使整个数组达到从小到大有序排列。

较冒泡排序的优点:同为通过不断的比较和移位来得到有序数组,但快排增大了比较和移动的距离,使关键字大的能从最前移到最后,关键字小的能从叫最后移到最前,从而减少了比较和移动的次数。

关键代码:
int Qsort(int arr[], int low, int high)//len不包括arr[0]
{int pivot;if (low < high){pivot = Partition(arr, low, high);//分成两组Qsort(arr, low, pivot - 1);//数组 low~pivot-1 的元素均比pivot小Qsort(arr, pivot + 1, high); //数组 pivot+1~high 的元素均比pivot大}return 0;
}
int Partition(int arr[], int low, int high)
{int pivot = arr[low];while (low < high){while(low < high && arr[high] >= pivot)high--;swap(arr, low, high);//处理数组的后部分,将比 pivot小的移到前面while(low < high && arr[low] <= pivot)low++;swap(arr, low, high); //处理数组的前部分,将比 pivot大的移到后面}  return low;//当low,high指向同一值时退出循环,此时low,high指向pivot
}
int swap(int arr[], int low, int high)
{int temp;temp = arr[low];arr[low] = arr[high];arr[high] = temp;return 0;
}

以上为 基本 快拍算法的实现。可通过下面测试验证:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>int array[50] = {0,3,6, 7,6,8,23,46,8,23,75,23,11,84,2,56,32};
int Partition(int arr[], int low, int high);
int Qsort(int arr[], int low, int high);//len不包括arr[0]
int swap(int arr[], int low, int high);int main()
{int i;int len = 20;Qsort(array, 1, len);for (i = 0; i <len; i++){printf("%d ",array[i]);}return 0;
}

复杂度分析:

当选取的pivot为中间值时,递归树是平衡的,此时性能较好。因为分成的两端,在递归划分是能进行最少次数的划分。此时,复杂度为O(logn),而当 最坏的情况,即pivot为最大时,将出现极端情况,此时复杂度为O(n)。具体推到可参考其他资料~

优化:

1.优化选取的枢纽。避免出现极端情况

思想:选多个数,取中间值作为pivot

2.优化不必要的交换

思想:arr[ow] = arr[high] 行,采用替换,而不是交换的方式进行优化。

int Partition(int arr[], int low, int high)
{int pivot = arr[low];while (low < high){while(low < high && arr[high] >= pivot)high--;arr[low] = arr[high];while(low < high && arr[low] <= pivot)low++;arr[high] = arr[low];}arr[low] = pivot;  return low;
}

3.优化小数组排序方案

思想:快排适合 数组较大时的排序,较少时不如简单排序。

方案:Qsort()排序对数组大小进行判断,选择适当的排序。

4.优化递归操作

思想:过多递归占用大量堆栈,同时入栈退栈浪费大量时间,改为迭代

int Qsort(int arr[], int low, int high)//len不包括arr[0]
{int pivot;while (low < high){pivot = Partition(arr, low, high);//分成两组Qsort(arr, low, pivot - 1);low = pivot + 1;//Qsort(arr, pivot + 1, high);}return 0;
}

讲解完毕。 欢迎大家提更多方案。

快速排序 算法 详解 及 深度优化相关推荐

  1. 快速排序算法详解(原理,时间复杂度,实现代码)

    快速排序算法详解(原理.实现和时间复杂度) 快速排序是对冒泡排序的一种改进,由 C.A.R.Hoare(Charles Antony Richard Hoare,东尼·霍尔)在 1962 年提出. 快 ...

  2. 十大经典排序算法-快速排序算法详解

    十大经典排序算法 十大经典排序算法-冒泡排序算法详解 十大经典排序算法-选择排序算法详解 十大经典排序算法-插入排序算法详解 十大经典排序算法-希尔排序算法详解 十大经典排序算法-快速排序算法详解 十 ...

  3. 经典排序算法(2)——快速排序算法详解

    快速排序(Quick Sort)也是一种典型的交换排序算法,通过交换数据元素的位置进行排序. 一.算法基本思想 (1)基本思想 快速排序的基本思想就是:通过一趟排序将要排序的数据分割成独立的两部分,其 ...

  4. Java的快速排序算法详解

    在进入这个话题之前大家可以想想,如果给你一个无序数组,要你处理成一个有序数组,你会怎么做? 可能是双循环的冒泡排序,可能拆开成多个子集合的再合并的希尔排序,排序算法很多,而现在要介绍的是另一种排序方法 ...

  5. 排序算法,最全的10大排序算法详解(Sort Algorithm)

    文章目录 排序算法,最全的10大排序算法详解(Sort Algorithm) 排序算法分类 排序算法稳定性 时间复杂度(time complexity) 1#时间复杂度的意义 2#基本操作执行次数 如 ...

  6. 排序算法(五)——堆排序算法详解及Python实现

    本文目录 一.简介 二.算法介绍 三.代码实现 排序算法系列--相关文章 一.简介 堆排序(Heap Sort)算法,属于选择排序类,不稳定排序,时间复杂度O(nlogn). 堆排序由Floyd和Wi ...

  7. 十大经典排序算法-桶排序算法详解

    十大经典排序算法 十大经典排序算法-冒泡排序算法详解 十大经典排序算法-选择排序算法详解 十大经典排序算法-插入排序算法详解 十大经典排序算法-希尔排序算法详解 十大经典排序算法-快速排序算法详解 十 ...

  8. 十大经典排序算法-冒泡排序算法详解

    十大经典排序算法 十大经典排序算法-冒泡排序算法详解 十大经典排序算法-选择排序算法详解 十大经典排序算法-插入排序算法详解 十大经典排序算法-希尔排序算法详解 十大经典排序算法-快速排序算法详解 十 ...

  9. 十大经典排序算法-选择排序算法详解

    十大经典排序算法 十大经典排序算法-冒泡排序算法详解 十大经典排序算法-选择排序算法详解 十大经典排序算法-插入排序算法详解 十大经典排序算法-希尔排序算法详解 十大经典排序算法-快速排序算法详解 十 ...

最新文章

  1. 程序员or产品经理┃同是职场脱发人,光头何苦为难光头!
  2. Scrum 项目1.0 2.0 3.0 4.0 5.0 6.0 7.0
  3. windows系统修改cmd窗口编码格式
  4. 工具:分享IntelliJ IDEA 5条调试技巧,太实用了!
  5. 不要再问我跨域的问题了
  6. 手机运行内存6+128跟8+128有什么区别?
  7. keras编写自定义的层
  8. 精选10款超酷的HTML5/CSS3菜单
  9. AcWing 798. 差分矩阵
  10. mui ajax的值php怎样获取,关于mui.ajax的设置,以及php取不到data值的问题的方法
  11. 视频编解码(三):H265编码器
  12. html 列表实现展开和收起,实现列表展开收起效果
  13. Insyde uefi 隐藏设置_文颐法语:iOS 14安装后发现的9个隐藏的iPhone功能
  14. hdu 6184 三元环数目
  15. MJUPC-022_编程挑战系列赛第二十二场(以梦为“码“ “数“说未来)题解(C/C++代码)
  16. 网易2018年春招 校招编程题
  17. VS2019编译python解释器源码及学习方法
  18. 公考复盘(一)——第三季第四季
  19. 主板、CPU、显卡中字母的含义
  20. cas自定义登陆认证

热门文章

  1. 5-SDRAM和重定位relocate
  2. 计算机是怎样跑起来的——概述
  3. 官宣 | BoCloud博云 x 紫光云引擎达成战略合作
  4. 1000多个摄影师后期照片编辑调色Lightroom预设
  5. 旧笔记本改造数码相框
  6. 斗鱼平均热度最高是正能量,想不到吧~~
  7. hypermesh 学习笔记二,
  8. 我美丽的家乡——洪雅[转]
  9. 阿里产品苏杰访谈:关于失败
  10. 计算机无法找到实达打印机,无法安装打印机