![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法整理
土豆爸爸
这个作者很懒,什么都没留下…
展开
-
二分查找
二分查找平均时间复杂度O(logn)自己写个例子以供后面查找。1,递归方法:int binary_search_recursion(int *array,int start,int end,int target){ if(end<start) { return -1; } int q = (start + end)/2 ; ...原创 2018-07-23 11:25:11 · 106 阅读 · 0 评论 -
堆排序
#include "stdio.h"void display(int* array,int len){ int i = 0; for(;i<=len;i++) { printf("%d ",array[i]); } printf("\n");}void swap(int *a,int *b){ int temp;...原创 2018-12-26 11:32:12 · 105 阅读 · 0 评论 -
归并排序
归并排序是分治思想,未排序的序列在序列单元为1的时候就是排序的了,然后再把每个排序的元素整合起来就是排序的序列了。算法时间复杂度未nlg(n)根据下面代码可以看到时间复杂度公式为:T(n)=2T(n/2)+O(n),进而可以得出nlog2(n)归并排序是稳定的#include "stdio.h"#include "string.h"int A_array[10];i...原创 2018-12-25 22:45:22 · 203 阅读 · 0 评论 -
洗牌算法
背景:洗牌对于棋牌游戏是必不可少的一个过程;再有一类问题可以用洗牌算范完美解决:随机生成不重复的N以内的数shuffle(洗牌)查了有限的几个博客,洗牌算法按照出现的时间顺序总共有三种1,Fisher–Yates Shuffle该洗牌算法的主要思想是:1,从原始序列的k个数里面随机取一个数m(randome(0,k)),2,把m放入到输出序列中,3,把原始序列从...原创 2018-12-31 16:24:31 · 804 阅读 · 0 评论 -
插入排序,希尔排序
插入排序的思想是:从待排序列的第二个元素开始,依次和前面已经排好序的元素对比,直到遇到一个比需要插入的元素大(小)的元素停止,那么这个元素(含)之前的元素就是有序的了,依次进行后面元素的排序。时间复杂度:O(n)---O(n2),平均复杂度O(n2)插入排序是稳定的。 希尔排序的思想是:希尔排序是对插入排序做的优化,插入排序在元素本身有序的时候会效率很高,希尔排序的思想就是...原创 2018-12-24 15:59:30 · 135 阅读 · 0 评论 -
选择排序
选择排序的思想:每次在未排序的序列找到最小(大)的数和未排序的序列中第一个数据进行交换,直到剩余最后一个为止。看样子又和冒泡排序有点类似?冒泡排序的思想也是第一次确定好未排序的序列的第一个数,第二次确定好第二个,以此类推。但是确定第N个数的方式不一样,冒泡排序是用未排序的序列的第一个数做为标杆,依次(注意依次)和剩余每个对比,比标杆大(小)的都进行交换,会增加交换次数;选择排序是做...原创 2018-12-24 11:18:09 · 95 阅读 · 0 评论 -
快速排序
快排做为一个时间复杂度系数比较好的排序方法用的比较多,基本原理为:每次把其中一个数放在正确的位置,然后递归的比较另外两段逻辑上独立的数据;那类比冒泡法也是每次把一个数据放在正确的位置上,有什么区别呢?快排把一个数据放到正确的位置上,会使原来的数据一分为二,那么分开的数据只会跟它所在那块数据来比较,总的比较次数少了,其实就是乘以2,和n平方除以2的区别,两部分只和各自逻辑段内的数据比较,...原创 2018-12-23 17:15:44 · 108 阅读 · 0 评论 -
基数排序和桶排序
基数排序是针对特定场景做出的排序方法特定场景具体指的是:待排序的序列每个元素都是由一组有固定长度,且每个‘字符’都是在一定数值范围内。说的有点绕,举个栗子(目前也只知道这个场景):一组有相同长度的字符串需要进行排序,每个字符串长度一定,每个字符串的每一个字符都是A-Z 0-9,假设都是大写。这个时候就可以使用基数排序了,基数排序的思想是:从最后面一个字符开始依次做计数(稳定...原创 2018-12-27 21:33:40 · 171 阅读 · 0 评论 -
计数排序
计数排序主要思想:统计每个数出现的次数,然后根据从小到大依次输出计数排序是稳定的时间复杂度O(n)=n+k;其中k是最大数减去最小数。其实是省略了系数,比如应该是2n+k+?#include "stdio.h"#include "stdlib.h"#include "string.h"void counting_sort(int *array,int len){ ...原创 2018-12-26 16:42:35 · 111 阅读 · 0 评论 -
选择排序
#include "stdio.h"int select_sort(int *array,int len){ int i = 0; int last = len - 1; int temp = 0; for (;i<last;i++) { int index=i; int j = i + 1; for(;j<=last;j++...原创 2018-07-23 11:58:17 · 107 阅读 · 0 评论 -
只有一个或者两个数出现一次,其它的都是出现两次解决方法
prolog:就是一道理论算法题吧,其它地方看到的,做个整理记录。一个N个数组成的数组,其中有一个数出现一次,其它的数都出现两次,如何快速找出这个数?答案:逐个的异或,最后的结果就是那个只出现了一次的数。原因:A异或A为0。 一个N个数组成的数组,其中有两个数出现一次,其它的数都出现两次,如何快速找出这个数?答案:还是先逐个异或,最后的结果就是那两个出现了一次的数的异或...原创 2019-01-17 13:51:55 · 1631 阅读 · 0 评论