算法
本专栏是一些常见的算法及一些知识点的总结
Keen_hard
Just a developer
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
算法-选择排序
选择排序的思路如下:从第二个数字开始,依次与第 i 位置数字进行比较,若比其小,则对俩俩交换,若比起大,则继续向后移动,一趟完成之后,最小的数字就找到了,然后 i++ ,然后重复刚才的操作,最终数列有序。 实例代码如下: //选择排序,时间复杂度:O(n*n),空间复杂度:O(1),不稳定 void Select_Sort(int* arr, int len) { int i; int j; ...原创 2019-10-12 22:48:00 · 140 阅读 · 0 评论 -
算法-Shell排序
Shell排序是对插入排序的改进和插入排序十分相似,Shell排序的思路如下: 分组 对每组进行排序:这个不是每组内有序,假设分为三组,使得这三组中的第一个数字有序,然后使得第二数字有序,一次所有数字都有序了 最后归到一组 示例代码如下: static void Shell(int* arr, int len, int grap) { int i; int j; int tmp; fo...原创 2019-10-12 22:36:52 · 149 阅读 · 0 评论 -
算法-插入排序
相信大家都玩过扑克牌吧!没玩过的同学得去学习一下哦!因为插入排序就是模拟了插扑克牌的过程哦! 插入排序分为三部: 第一步:找数据 第二步:比较大小 第三步:移动数据 思维导图如下: 代码如下: void InsertQort(int *arr,int len) { int tmp; int i; int j; for (i = 1; i <= len - 1; i++) ...原创 2019-08-02 23:21:26 · 195 阅读 · 0 评论 -
算法-二分查找
首先说一下二分查找的条件:必须是有序的一组数据。 好了直接开始! int BinarySearch(int* arr, int len, int key) { if (NULL == arr || len < 0) return -1; if (key < arr[0] || key >arr[len - 1]) return -1; int left = 0;...原创 2019-07-22 00:25:23 · 150 阅读 · 0 评论 -
算法_冒泡排序
本博客只是单纯的冒泡算法,没有对其进行优化;这里就不叙述思路了,直接开始代码: #include<stdio.h> void Swap(int*a, int*b) //交换函数 { int tmp = 0; tmp = *a; *a = *b; *b = tmp; } void BubbleSort(int* arr, int len) //冒泡排序 { int i; ...原创 2019-07-22 04:33:17 · 158 阅读 · 0 评论 -
算法-快速排序
快排的递归写法,思路大致如下:给定一组数据,标记头和尾,然后定义一个变量key,初始化为第一个值, 从尾部开始,若其比key大,则尾部向前移动,若其小于key则和头位置交换数据, 然后从头部开始,若其值小于key,则头部向后移动,若其值大于key则将其值赋给尾部 依次循环,直到头部等于尾部,结束退出。这也被称为快排的第一次划分。划分函数代码如下: int Partition(int *arr, ...原创 2019-07-26 15:12:15 · 170 阅读 · 0 评论 -
算法-堆排序
堆排序基本思路:首先建大根堆,然后进行堆调整,最后顺序打印出来就是有序的啦! 建大根堆,建一颗二叉树,使得左右孩子的值都大于父节点,从最后一个父节点开始,循环调整使得满足父节点大于左右孩子的值,如下图: 代码示例如下: void build_max_heap(int tree[], int len) //建大根堆 { int last_index = len - 1; ...原创 2019-08-30 13:37:59 · 165 阅读 · 0 评论 -
算法-二分排序
二分排序这个词是我在面试中遇到的,当时第一反应是二分查找,然后被打断,是二分排序算法,最终才了解到,二分排序就是我们熟知的归并排序。它又称二路排序。 首先说一下归并的思想:先将一组数列,数列中含有n个元素,假设将每一个元素看成是一个有序的数列,就是n个有序的子序列,每个子序列的长度为1,然后俩俩合并,此时,有n / 2个长度为2的有序子序列,依次下去,最终整个数列有序。 代码示例如下: ...原创 2019-10-09 19:46:37 · 1662 阅读 · 0 评论
分享