前言现在的面试越来越复杂,算法已经成为面试过程中不可或缺的一部分。如果你想进入稍微好一点的公司,“算法是必须的,必不可少的一环”。那么算法怎么学呢,很多同学的第一反应肯定是去letcode做题,首先我不反对做题的方式,但是对于一个没学过算法的同学来说,大部分问题都不引人深思,是的,花一个多小时去蛮力解决一个问题意义不大,事后再看别人更好的解法,大概率不会所以,我觉得有必要“专门针对算法做一些简单的训练”。我最近也在学习,同时在公众号上更新学习结果,可能还有很多问题,希望能帮到你。另外,最近很多同学也在学习go,所以我就用go代码来演示一下算法。今天八卦不用多说,先从最简单的5种基本排序算法比较五种基本排序算法1.Bubble排序算法描述了比较相邻元素。如果第一个大于第二个,则交换它们。对每一对相邻的元素做同样的事情,从开始的第一对到最后的最后一对,所以最后的元素应该是最大的数。对除最后一个元素之外的所有元素重复上述步骤。重复步骤1~3直到排序完成。代码演示funcbubbleSort(arr[]int)[]int{iflen(arr)<=1{returnarr}fore:=len(arr)-1;e>0;e--{对于我:=0;我arr[i+1]{Swap(arr,i,i+1)//交换元素}}}returnarr}funcSwap(arr[]int,i,jint)[]int{temp:=arr[j]arr[j]=arr[i]arr[i]=tempreturnarr}2、选择排序算法描述了n条记录的直接选择排序可以经过n-1条直接选择排序产生有序的结果。具体算法描述如下:在数字列表的最左边放置假想的墙,墙的左边是已排序的子列表,右边是未排序的子列表。在未排序的子列表中查找(选择)最小(或最大)的元素。将所选元素与未排序列表中的第一个元素交换。将想象中的墙向右移动一个位置。重复步骤2到4,直到整个数字列表排序完毕(需要n-1轮)。代码演示funcselectSort(arr[]int)[]int{iflen(arr)<=1{returnarr}fori:=0;我<长度(arr);i++{varminIndexint=iforj:=i+1;j=0;j--{ifarr[j]>arr[j+1]{Swap(arr,j,j+1)}}}returnarr}funcSwap(arr[]int,i,jint)[]int{temp:=arr[j]arr[j]=arr[i]arr[i]=tempreturnarr}4.快速排序算法描述了快速排序的基本思想:将待排序的记录通过一次pass分离成两个独立的部分,其中一部分记录的关键字小于另一部分记录的关键字,则可以将两部分记录分别排序,以达到整个序列的顺序。从序列中选择一个元素,称为“枢轴”。重新排序序列,所有小于参考值的元素都放在参考值的前面,所有大于参考值的元素都放在参考值的后面(相同的数字可以去任何一边)。此分区退出后,基准测试位于序列的中间。这称为分区操作。递归排序元素小于参考值的子数组和元素大于参考值的子数组。代码实现//快速排序funcquickSort(arr[]int)[]int{iflen(arr)<=1{returnarr}middle:=arr[0]varleft[]intvarright[]intfori:=1;我<长度(arr);i++{如果arr[i]>middle{right=append(right,arr[i])}else{left=append(left,arr[i])}}middle_s:=[]int{middle}left=quickSort(左)右=quickSort(右)arr=附加(追加(左,middle_s...),右...)返回arr}