常见排序算法有10种,这里借用一张图总结下:
冒泡排序源码: BubbleSort
选择排序源码: SelectionSort
插入排序源码: InsertionSort
希尔排序源码: ShellSort
快速排序源码: QuickSort
归并排序源码: MergeSort
堆排序源码: HeapSort
基数排序源码: RadixSort
计数排序源码: CountingSort
二分查找算法源码: BinarySearch
插值查找算法源码: InterpolationSearch
斐波那契查找算法源码: FibonacciSearch
双指针,指的是在遍历对象的过程中,不是普通的使用单个指针进行访问,而是使用两个相同方向的指针进行扫描,从而达到相应的目的。
个人认为此算法就是充分利用数组有序这一特征,将本来需要两次遍历的操作简化为一次遍历,从而大大提高的程序的效率
下面用图来简单解释一下这个算法:
以leetcode第283题为例,需要看源码的小伙伴我会放链接在下方
首先我们定义两个指针,一个名为left,一个名为right
一开始left指针不动,right指针向后搜索,遇到一个非0的数字,将其覆盖到left指针位置上的元素,之后left指针的也向后移动
继续搜索,以不断的将非0元素往前挪,当right指针达到数组末端后,搜索结束。
可以看到,我们已经将所有非0元素都移动到数组的头部了,接下来对left+1位之后的元素全都赋值为0即可。
最终效果如下:
leetcode-283题: 移动零源码:MoveZero
leetcode-26题: 删除数组的重复项源码:DeleteDuplicate
leetcode-27题: 移除元素源码:RemoveElement
暴力匹配算法源码: ViolenceMatch
kmp匹配算法源码: KMPMatch