简介:题库难度在简单和中级,也是面试中的常问题。题目的解答,使用的开发语言是Swift。由于题目描述很长,而且还有各种案例提示,为了不占篇幅,就不展示了。可以直接查询题目编号,也可以通过搜索关键词搜索题目的描述。文章的写作顺序是:1.展示题号和问题链接2.描述核心思想3.代码实现最后将本文提供的代码提交并通过LeetCode。作者:JefferyYu1。排序算法实现题(排序算法)1.冒泡排序2.选择排序3.插入排序4.快速排序1.冒泡排序O(n2)1.1核心思想:每次选最小的上去,求它比我小,换位置到1.2代码实现:funcbubbleSort(_nums:inout[Int]){foriin0..nums[i]{nums.swapAt(j,j+1)}}}}4.快排O(NLogN)4.1算法思想快排的思想还是很有用的,就是把比我大的部分放在我右边,比我小的部分放在我左边。具体如果想看具体实现细节,可以看我写的这篇文章:一文看懂快速排序4.2代码实现funcquickSort(nums:inout[Int])->[Int]{sort(nums:&nums,begin:0,end:nums.count)returnnums}funcsort(nums:inout[Int],begin:Int,end:Int){如果结束-begin<2{return}varrBegin=begin;varrEnd=endletmid=pivotIndex(nums:&nums,begin:&rBegin,end:&rEnd)sort(nums:&nums,begin:begin,end:mid)sort(nums:&nums,begin:mid+1,end:end)}//[一个大数组分为左右两个数组]//递归时抛出枢轴的位置作为左数组的末尾和右数组的开始privatefuncpivotIndex(nums:inout[Int],begin:inoutInt,end:inoutInt)->Int{letpivot=nums[begin]end-=1whilebeginnums[begin]{begin+=1}else{nums[end]=nums[begin]end-=1break}}}//将轴点元素放到最终位置,此时begin和end重合所以用below开始和结束都是可能的nums[begin]=pivotreturnbegin}