程序员基础之——排序算法

快速排序

前言

快速排序是在面试中最常见的问题之一,如果有幸问到快排,面试官通常都要求应聘者在纸上手写出快排的代码。本人在最近的一次面试中就被要求手写快排,本来觉得快排的思想早已烂熟于心了,随便写一个出来没什么问题。但是当面前坐着一个面试官,并且要在15分钟内推导出一个无措的快排出来时,对我个人来说,但是还是非常紧张的,最终提交的答案还是存在瑕疵。

由此萌生了通过博客记录面试中基本问题的想法,一是给自己归纳总结,二是希望能够给阅读博客的童鞋也提供一些参考。

本文的目的是想要记录快速排序简洁、优雅的实现方式,并且探讨快速排序的一些问题。并且参考了各类书籍与博客,目前觉得最简洁、最好理解的方式如下:

‘‘‘

void quickSort(int arr[], int lo, int hi){

if(!arr || lo < 0 || lo >= hi) return;

int mid = partition(arr, lo, hi);

quickSort(arr, lo, mid - 1);

quickSort(arr, mid + 1, hi);

}

void partition(int arr[], int lo, int hi){

int start = lo;

int end = hi + 1;

int value = arr[lo];

while(true){

while(arr[++start] < value && start < hi);

while(arr[--end] > value);

if(start >= end) break;

swap(&arr[start], &arr[end]);

}

swap(&arr[lo], &arr[end]);

return end;

}

‘‘‘

主要参考链接https://algs4.cs.princeton.edu/home/

原文地址:https://www.cnblogs.com/migoo/p/8548618.html

时间: 2024-10-10 01:37:27

程序员基础之——排序算法的相关文章

程序员是否必须会算法

本章的标题既然是"程序员与算法",就必然要涉及一个基本问题,那就是"程序员是否必须会算法".这是一个充满争议的问题,虽然并不像"生存还是毁灭"之类的选择那样艰难而沉重,但也绝不是一个轻松的话题.朋友们在我的"算法系列"博客专栏上发表的评论和回复,并不都是我所期待的赞美和鼓励,也常常会有一些冷言冷语.比如,"穷举也算是算法吗"或者"请你说明一下算法在XX系统中能起到什么作用". 有一次,一

黑马程序员——基础加强篇

------- android培训.java培训.期待与您交流! ---------- MyEclipse相关知识 Workspace与project 切换工作空间:File---Switch Workspace---Other 一个工作间包含多个工程,切换工作间之后,会影响里面的工程,例如快捷键什么的都要重新配置如果重新配了之后快捷键还没有用就要考虑下那个快捷键是不是冲突了    视图管理与程序调试 可以通过Window---Show View来添加各种透视图. 调试程序的时候可以在代码右边双

黑马程序员-基础加强-泛型

Java泛型(generics)是JDK 5中引入的一个新特性,允许在定义类和接口的时候使用类型参数(type parameter).声明的类型参数在使用时用具体的类型来替换. 这种参数类型可以用在类.接口和方法的创建中,分别称为泛型类.泛型接口.泛型方法. Java语言引入泛型的好处是安全简单. 在Java SE 1.5之前,没有泛型的情况的下,通过对类型Object的引用来实现参数的"任意化","任意化"带来的缺点是要做显式的强制类型转换,而这种转换是要求开发者

程序员应掌握的算法

原文:程序员必须掌握哪些算法?

javascript-几个基础的排序算法

对这几个基础排序算法进行梳理,便于以后查看. /** * * 冒泡排序 * 从末尾开始相邻两数相互比较大小,满足条件就交换位置.循环每进行一次,即可确定第i位数的值. *冒泡排序的时间复杂度为O(n^2). * */ function bubbleSort(arr){ if(arr == null || arr.length == 0) return; for(var i =0 ; i < arr.length-1 ;i++){ //比较n-1次即可 for(var j = arr.length

程序员必须掌握的算法有哪些?

由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法.这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍.下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过不错的文章给大家.大家也可以留言区补充. 一.算法最最基础 1.时间复杂度 2.空间复杂度 一般最先

腾讯t4架构推荐:一份程序员必备的结构算法算法之道!

引言 "语言只是工具,算法才是程序的灵魂."这句话相信每一个程序员都听过无数次.然而在实际的工作中,一个产品从开发到上线,似乎哪一步都用不到数据结构与算法.于是很多程序员都有这样一种错觉:就算我不懂算法,只要语言写得溜.开发框架用得熟练.封装好的各种接口.库调用得熟练,照样能实现老板“天马行空”(傻逼)的需求,照样可以混到高薪.算法的学习,别人帮不了你多少,主要还是的靠自己悟,靠自己花时间去理解,师傅领进门,修行在个人,算法讨论,思路分享,去牛客网看看,各路大神,各种解决思路,你一定会

数据结构算法基础-内部排序算法

1 arr = [1,23,12,9,8,8,9,1,1,8,] 2 def quickSortCore(arr,start,end): 3 if start < end: 4 index = partition(arr,start,end) 5 quickSortCore(arr,start,index-1) 6 quickSortCore(arr,index+1,end) 7 8 def partition(arr,start,end): 9 key = arr[start] 10 whil

黑马程序员-基础部分

基础知识 1.什么是跨平台性?原理是什么?JVM 不同的系统都可以运行.系统安装虚拟机.. 我的总结:Java 程序之所以能够实现跨平台运行,是因为它根本就不直接在任何底层 平台上运行,有虚拟机调用. 2.Jre 和Jdk 的区别? JDK;包含虚拟机和类库,也包含JRE JRE:(Java Runtime Environment),java 运行环境 简单而言:使用JDK 开发完成的java 程序,交给JRE 去运行. 3.java 虚拟机JVM Java Virtual Machine ,简