因为<The C Programming Language>一书中有一个练习,需要用到快速排序,所以又复习了一下,感觉收获颇多,故而分享之。

快速排序的核心是一种 divide and conquer 算法。可惜我们接触的中文书籍里面,突出强调了一趟快速排序怎么做,而没有重点介绍这种编程思想,可谓是本末倒置。单就一趟排序的细节来说,有很多中实现版本,每种版本都是处于不同的考虑。我们在那本蓝皮的《数据结构》当中学到的快速排序是一种 in-place quick sort。这个版本对空间复杂度做了优化,使得实现当中不需要占用额外的空间,空间复杂度为O(1)。不过,细节上我觉得,没必要设置两个变量i,j,然后从两头开始比较,因为这样和设置一个变量一样,都需要O(n)次比较。所以,我做了一些改变。

代码:

void qsort(char *listptr[], int left, int right)
{int pivot = 0;// First, partition operationpivot = partition(lineptr, left, right);if (left < pivot)// recursively quick sort the former part if its length greater than 1qsort(lineptr, left, pivot);// recursively quick sort the latter part if its length greater than 1if ((pivot+1) < right)qsort(lineptr, pivot+1, right);
}int partition(char *listptr[], int left, int right)
{int pivot = left, i = left+1;for (; i < right; i++){   if (listptr[i][0] < listptr[pivot][0]) {swap(&listptr[i], &listptr[pivot]);pivot = i;}   }   return pivot;
}

转载于:https://www.cnblogs.com/snake-hand/p/3149596.html

快速排序算法之我见(附上C代码)相关推荐

  1. Python 快速排序算法【简单易懂,代码直接运行】

    Python 快速排序算法[简单易懂,代码直接运行] 给定你一个长度为 n 的整数数列. 请你使用快速排序对这个数列按照从小到大进行排序. 并将排好序的数列按顺序输出. 输入格式 输入共两行,第一行包 ...

  2. Python与Matlab算法学习一文通(快速排序算法)(更新中)

    想利用一些空余时间学一学python与matlab,与同学建立不知道能坚持多久的学习联盟,每周一部分题目,利用一周时间完成原理文档与程序编写.由于主要研究方向为其他方向,因此只会利用很少的空闲时间来学 ...

  3. python快速排序代码_Python实现快速排序算法

    原标题:Python实现快速排序算法 Python实现快速排序算法 快速排序算法是一种基于交换的高效的排序算法,由C.R.A.Hoare于1962年提出,是一种划分交换排序.它采用了一种分治的策略,通 ...

  4. 经典算法(4)图解快速排序算法及代码实现

    写在前面: 我是「扬帆向海」,这个昵称来源于我的名字以及女朋友的名字.我热爱技术.热爱开源.热爱编程.技术是开源的.知识是共享的. 这博客是对自己学习的一点点总结及记录,如果您对 Java.算法 感兴 ...

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

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

  6. 快速排序程序c语言,C语言实现的快速排序算法的代码

    工作期间,将开发过程中经常用到的代码片段记录起来,如下代码段是关于C语言实现的快速排序算法的代码,应该对各朋友也有用处. #include #include while(l--) { } } if ( ...

  7. 快速排序算法讲解及代码(详细)

    快速排序算法 一.序言 二.快速排序基本思想 三.具体步骤 四.具体代码 一.序言 快速排序是一种高效且使用广泛的排序算法,在很多语言的标准库中自带的排序都是快速排序.所以我们也有必要了解快排的原理以 ...

  8. 数据结构与算法必备的 50 个代码实现

    点击上方"AI有道",选择"置顶"公众号 重磅干货,第一时间送达 数据结构和算法是程序员的内功心法和基本功.无论是人工智能还是其它计算机科学领域,掌握扎实的数据 ...

  9. 算法图解/二分查找/简单查找/选择排序/递归算法/快速排序算法/

    大 O 表示法 大 O 表示法在讨论运行时间时,log 指的都是 log2 大 O 表示法指出了算法有多快,让你能够比较操作数,它指出了算法运行时间的增速,而并非以秒为单位的速度. 大 O 表示法指出 ...

  10. 快速排序算法实现思想个人理解

    一.概述 快速排序是冒泡排序的改进算法.它也是通过不断比较和移动交换来实现排序的,只不过它的实现增大了记录的比较和移动的距离,将关键字较大的元素从前面直接放到后面,关键字较小的元素直接从后面放到前面, ...

最新文章

  1. Oracle 增删改查
  2. spring源码分析之cache注解
  3. 1.3.3 错题整理(组成原理)
  4. pl sql 工具insert into 中文 后, select为乱码
  5. SharePoint工作流开发点滴(2) - 开发第一个SharePiont工作流: HelloWorldSequential 的注意事项...
  6. 怎样获取当前页面值php,想要得到当前页面的所有url参数信息怎么用PHP来实现?...
  7. VS Code Python 将支持 Jupyter Notebook
  8. arraylist 后往前遍历_ArrayList和LinkedList的深入浅出
  9. 4G网络建设近尾声 SDN/NFV是5G网络创新关键
  10. Gradle下载 Jar 包
  11. yolov3详细讲解
  12. 苹果官方首曝iOS 15!这些经典iPhone都要被弃
  13. USB 协议整理 九:USB 协议调试工程说明
  14. Javascript学习笔记(犀牛书1、2章)
  15. 怎么把视频里的音乐提取成音频?
  16. 造血干细胞扩增、转染以及基因编辑优化解决方案
  17. 小型医疗门诊挂号系统 医院管理系统后台thinkphp内核源码
  18. vue功能之“支付宝支付“
  19. 胜博发公益:只要用手机就能随手做公益 苹果与许多公益团体合作
  20. 选股服务器列表为空 无法执行选股,东方财富客户端如何设置自动选择服务器 设置有条件选股方法...

热门文章

  1. JAVA随机数生成 | Math.random()方法 | 随机生成int、double类型
  2. Navicat怎样导入Excel表格数据
  3. Thinking in Java 11.3 添加一组元素
  4. docker安装mySQL 8
  5. libevent eventbuffer读写水位思考
  6. Base64转BufferedImage
  7. c bool 类型检查_第3篇:C/C++ 检查数字类型的最高有效位(MSB)
  8. mysql 添加实例_如何在多实例基础上再添加一个mysql的实例
  9. gpu opencl 向量加_【Embedding】GloVe:大规模语料中快速训练词向量
  10. vs2019配置opencv_VS2019下Opencv配置