龙空技术网

ChatGPT写的vs我写的——快速排序算法

数据分析每天进步一点 149

前言:

当前咱们对“算法第一周答案”大致比较着重,大家都想要学习一些“算法第一周答案”的相关内容。那么小编同时在网络上搜集了一些有关“算法第一周答案””的相关文章,希望小伙伴们能喜欢,各位老铁们一起来学习一下吧!

【上期留下的关于选择排序的小思考为试推一下其算法复杂度,本期揭晓答案:选择排序的时间复杂度为O(n^2),空间复杂度为O(1)。本期讲讲快速排序算法】

今天分享的快速排序算法代码是ChatGPT写的——

一、ChatGPT写的:

先来看看ChatGPT的写法,通过向ChatGPT提问:用Python语言写一个快速排序的功能代码,它就写出了如下代码:

给一个案例,试着运行下,果然起了作用:

运行结果为:

二、我之前写的:

再来看看我之前刚开始学习时候写的快速排序算法,是这样的:

当然,运行结果也是没问题的:

同样的排序结果,为什么ChatGPT只用了9行代码,而我之前写的却用了19行呢?带着问题继续看下去……

三、快速排序算法的原理

快速排序的名字顾名思义,在实际应用中,它是处理大数据最快的排序算法之一。主要的算法步骤有3:

1. 从数列中挑出一个元素,称为 “基准”;

2. 所有元素比基准值小的摆放在基准左侧,即左区,比基准大的放在基准右侧,即右区;

3. 递归地把小于基准值元素的子数列和大于基准值元素的子数列排序,大白话就是对第2步分出的左区和右区继续重复第1、2步,直至算法结束

比如以上面的图为例,默认每次选择数列的最后一位数值为基准,首次分区时,5为基准,所以3、1、2分至左区,7、8、11、9分至右区;接下来同时对3、1、2(2为基准)和7、8、11、9(9为基准)各自进行分区到这一步3、1、2分为1、2、3于是停止,右侧7、8、11、9分成7、8、9、11,其中7、8需要再经历一次得到7、8(这是因为算法还在继续运行)。最终得到1、2、3、5、7、8、9、11的升序结果。

四、两段代码的比较

首先,两段代码运行的结果是一样的。然后,直观上的不同点很明显,就是ChatGPT写的代码行数更少,主要原因是:

1.构建了新的数列left、middle、right,相比之下我之前写的这段代码是在原数列中交换元素值;

2.for和if使用了条件语句表达,看起来更为简洁(什么是条件语句,请戳Python基础系列(四):这时候需要的是坚持——程序语句及结构)。

试验1:我们来试试两段代码的运行效果,直接上1000万的数据量:

结果竟是我之前写的代码运行时间更短:

试验2:不行,做实验得严谨,再来试一次,这次用500万的数据量:

结果仍是我之前写的代码运行时间更短:

其实也比较容易理解,ChatGPT中代码行数虽然更短,但是用到了3个for语句,而我之前写的代码里边for语句仅有1个,循环比较吃时间。所以在时间上的比较不一定代码行数越短,就运行时间也越短。

这个案例中就是我写的这个算法复杂度相对更低(什么是算法复杂度,请戳算法系列开篇:10分钟讲明白算法复杂度)

但是,确实感觉到了ChatGPT的厉害,我觉得同样给一定的学习时间,它所能学到的信息量要比人更高,达成一定目标的速度要比人更快;就比如这次这个快速排序算法,如果你继续追问可否换一种运行时间更快的快速排序算法,它也能写出我这个,甚至可能进一步优化。

其实越来越感觉到以前很多的逻辑在当下都得做一点相应调整,比如说以前给孩子报画画、练字的培训班,是不是不用花那么多时间,而是让她/他早一点接触AI相关的东西,分几个维度由浅至深:

了解未来AI可以做的事

怎么样使用AI做到这件事

可以参与到AI的运维建设中

毕竟我们以前有多难想象万物互联,

今天就有多难想象万物AI,但最终……

标签: #算法第一周答案