一、排序算法
1. 选择排序
选择排序基本思想为每一趟从待排序的数据元素中选择最小(或最大)的一个元素作为首元素,直到所有元素排完为止,简单选择排序是不稳定排序。详细解释见:选择排序实现
选择排序实现2. 冒泡排序
冒泡排序的基本思想是,对相邻的元素进行两两比较,顺序相反则进行交换,这样,每一趟会将最小或最大的元素“浮”到顶端,最终达到完全有序。详细解释见:冒泡排序实现
冒泡排序实现3. 插入排序
直接插入排序基本思想是每一步将一个待排序的记录,插入到前面已经排好序的有序序列中去,直到插完所有元素为止。详细解释见:插入排序实现
插入排序实现4. 快速排序
快速排序基本思想是先选择基准数,把所有小于基准数的都移到左边,把所有大于基准数的都移到记基准数的右边。然后再对左边数组和右边数组进行同样的操作,最后整个数组就都排好序了。
快速排序实现一:快速排序实现一
快速排序实现二:快速排序实现二
快速排序实现5. 归并排序
归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。
详细实现见:归并排序实现
图解归并排序:图解归并排序
6. 希尔排序
7. 堆排序
图解堆排序:图解堆排序
8. 计数排序
技数排序很简单,我简单举例解释一下:有一个数组都>0,并且知道最大值,要求对其排序。我们可以初始化一个int array[MAX] = {0}. 然后遍历数组得到每一个value,若array[value]++;最后遍历array,就输出值非0的下标,就是排好序的数组。
9. 基数排序
基数排序就是对数字按位进行排序,比如按个位排序,再按百位排序,再按千位,最后就可以得到整个有序数组。基数排序也是用空间代替了比较。详细实现见:基数排序实现
10. 桶排序
桶排序是在技数排序的基础而来,具体实现见:桶排序实现
11. 外部排序外部排序二
以上数据量不大,一次性在内存中可以执行完的都为内部排序。外部排序是需要内存和磁盘相结合的形式进行的排序形式。
外部排序详解一:外部排序
外部排序详解二:外部排序二
二、查找算法
1. 二分查找
二分查找是在一个已经排好序的数组上进行查找,每次取中间的值,小于则从左边继续查找,大于则从右边继续查找,等于则直接返回中间值。
2. 二叉树
二叉树本身用处不大,主要都是在二叉树上的优化,二叉树讲解:二叉树
3. 二叉查找数
二叉查找树详细实现:二叉查找树
4. 平衡二叉树
二叉查找树最差情况下可能所有的子节点全部偏向一边,而平衡二叉树是平衡的二叉查找树,最差情况也是平衡的,不会出现完全导向一边的情况。平衡二叉树实现:平衡二叉树
5. 平衡2-3数
平衡二叉树重建平衡时可能非常复杂,2-3树是对齐的优化。具体实现:平衡2-3树
6. 红黑树
红黑树是对平衡2-3树的一种实现,具体实现:红黑树
7. B树
附带:B树讲解视频
8. B+树
附带:视频讲解
9. B*树
附带:视频讲解
网友评论