菜鸡笔记
菜鸡笔记
hello陈胜
这个作者很懒,什么都没留下…
展开
-
指针重温(1)——static关键字
static用于表示链接属性还是存储类型?1、当用于函数定义或代码块之外的变量声明时:用于修改标识符的链接属性(从external改为internal),存储类型(静态存储)和作用域(当前源文件)没有发生改变;2、当用于代码块之内的变量声明时:用于修改变量的存储类型,从自动变量修改为静态变量,但变量的链接属性(none)和作用域(代码块)没有发生改变;【来源于书籍《C和指针》】...原创 2020-07-07 00:07:12 · 154 阅读 · 0 评论 -
字符串中的查找与替换
字符串中的查找与替换文章转载自:https://blog.csdn.net/bufanq/article/details/51567454常用字处理软件或者编辑器都提供字符串的查找和替换功能,本文描述如何借助C语言的字符串处理函数来实现字符串的查找和替换功能。先说查找,字符串的查找主要使用strstr函数,其原型为:char * strstr(char * str1, char * str2),函数的功能是在str1中查找str2,如果str2是str1的子串,则返回str2在str1中第一次出现的位转载 2020-06-27 16:02:23 · 5207 阅读 · 0 评论 -
菜鸡笔记值——插值查找
菜鸡笔记之——插值查找插值查找:插值查找是二分查找的另一种改进,二分查找的分割点是每一段的中点,斐波那契查找的分割点是黄金分割点,而插值查找也有它独特的分割方式。二分查找或斐波那契查找每次分割都是按照固定的规则分割下去,或者说他们每次分割后的两段的比例是一样的,这样没有办法根据查找值target来调整每次分割后的比例,算法科学家提出一种新方法:二分查找的分割点为mid = (high+low)/2,也可以写成mid = low + (high-mid)*(1/2),将这个(1/2)改写为(target原创 2020-06-27 15:10:47 · 117 阅读 · 0 评论 -
菜鸡笔记之——斐波那契查找
菜鸡笔记之——斐波那契查找斐波那契查找:前提:查找的序列必须已经排好序,并且数据个数为fib[k]-1个(若不足fib[k]-1个需手动扩充序列)斐波那契查找类似于二分查找,但与二分查找不同的是分割点不同,二分查找每次以(high+low)/2作为分割点,而斐波那契查找每次以黄金分割点作为分割位置。思路:一开始将目标值target与第F(k-1)位置的记录进行比较(即mid=low+F(k-1)),比较结果分为三种:相等,mid位置的元素即为所求,直接返回mid;target>array原创 2020-06-26 17:32:53 · 130 阅读 · 0 评论 -
菜鸡笔记之——分块查找
菜鸡笔记之——分块查找+注释练习分块查找:前提:整个线性表可以无序,但要求分块有序,比如由一组数据:1,3,2,6,9,8,13,15,19,32数据整体无序,但如果将其分为四组(1,3,2),(6,9,8),(13,15,19),(32),就能保证前一块的最大值比后一块中的任意一个值小,这称为分块有序,每一组叫做一个“块”,而每一块的最大值记为key,用key来当作查找块的索引,因此分块查找也叫做索引查找,分块查找要求分块有序使其有较大的局限性。思路:根据块的key值检索待查找的数在哪一块中(原创 2020-06-26 12:09:52 · 187 阅读 · 0 评论 -
菜鸡笔记之——二分查找
菜鸡笔记之——二分查找+文件操作二分查找:前提是所有数据都已经排好序,将目标值每次跟中间的数mid比较,如果相等可以直接返回,如果比mid大则继续查找大的一边,否则继续查找小的一边。代码实现(二分查找+读取文件):文件arctan.txt存放arctan(i)的值,i = 1,2,3,…360,输入一个arctani 的值查出i为多少。# include <stdio.h># include <stdlib.h># include <math.h># de原创 2020-06-24 14:08:06 · 147 阅读 · 0 评论 -
菜鸡笔记之——顺序查找
菜鸡笔记之——顺序查找顺序查找:待查找数据与数据组的元素一一比较,找得到输出该数的位置,找不到输出错误提示信息,顺序查找比较简单,但执行效率不高。代码实现(顺序查找):# include <stdio.h>int main(void){ int a[100]; int N,i,search_number; printf("the number of the array(less than 100):"); scanf("%d",&N);原创 2020-06-24 12:14:17 · 123 阅读 · 0 评论 -
菜鸡笔记之——基数排序
菜鸡笔记之——基数排序基数排序:先按照每一个元素的个位的大小对所有数进行排序,再按照每一个元素的十位的大小进行排序,以此类推,直到最高位。参考文章代码实现(基数排序):# include <stdio.h># include <malloc.h># include <string.h># include <math.h>int main(void){ int N; printf("the length of the arr原创 2020-06-21 12:58:34 · 125 阅读 · 0 评论 -
菜鸡笔记之——桶排序
菜鸡笔记之——桶排序桶排序:桶排序可以理解为简化版的计数排序,自然地限制条件就更多,适用范围更窄,原理跟计数排序类似,而且比较简单;桶排序大概比较适合于元素为正整数,且最大值不太大地情形,而计数排序还适用于整数(可含负整数),跨度不太大的情形,两者都不适用于字符串排序。时间复杂度:O(n+k);代码实现(桶排序):# include <stdio.h># include <malloc.h># include <string.h>int main(vo原创 2020-06-21 00:05:38 · 160 阅读 · 0 评论 -
菜鸡笔记之——希尔排序
菜鸡笔记之——希尔排序希尔排序:时间复杂度:平均O(nlogn);稳定性:不稳定排序;思路:将数据分组,每相隔step(步长),对每一组进行插入排序。希尔排序为插入排序的进一步优化;代码实现(希尔排序):# include <stdio.h># include <malloc.h>int main(void){ int N; printf("the number of the array:"); scanf("%d",&N);原创 2020-06-19 22:22:08 · 127 阅读 · 0 评论 -
菜鸡笔记之——归并排序
菜鸡笔记之——归并排序归并排序:将数据一步步细分,对每一部分进行排序,在将各个部分合起来排序;代码实现(归并排序):# include <stdio.h># include <string.h># include <malloc.h>int main(void){ int N; printf("the number of the array:"); scanf("%d",&N); int * array = NUL原创 2020-06-20 11:31:21 · 123 阅读 · 0 评论 -
菜鸡笔记之——计数排序
菜鸡笔记之——计数排序计数排序:计数排序是非比较排序,它是分布排序,其时间复杂度可以突破nlogn达到O(n),但是其适用范围相对较小,不适合字符串比较,不适合数据跨度较大的数组的排序。时间复杂度:O(n);稳定性:稳定排序;思路:1、开一个与原始数组一样大的数组result,用于排序后储存结果;2、开一个临时数组temp,其长度的原始数组元素中的最大值减最小值加1,用于统计原始数组中各个元素出现的次数;(出现多少次,temp[a[i]]就自增多少次,这里有一个问题:a[i]可能为负数,可以通原创 2020-06-20 17:34:57 · 139 阅读 · 0 评论 -
菜鸡笔记之——快速排序
菜鸡笔记之——快速排序快速排序时间复杂度:O(n*logn)(无序情况下),O(n^2)(最坏的情况下)稳定性:不稳定排序快速排序有多种方法,包括:递归快排:左右指针法、前后指针法、挖坑法;非递归快排;快排优化方法:三数取中法;一、递归快排1、左右指针法:思路:(1)取数据组中的一个数为基准数,一般这个数为最左端或最右端的一个数,并同时设置哨兵变量i,j,分别从数据组两头开始检测,j从右端开始,找比基准数小(大)的数,i从左端开始最左端开始,找比基准数大的数,找到后将两数交换,反复进原创 2020-06-17 20:48:11 · 165 阅读 · 0 评论 -
菜鸡笔记之——插入排序
菜鸡笔记之——插入排序插入排序可分为:直接插入排序、折半插入排序一、直接插入排序时间复杂度为O(n^2)思路(以从小到大排序为例):1、给定一组数据,只看第一个元素,认为已经排好序;(一个数可以看成排 好序,这没的说)2、看a[0]与a[1]的大小关系,并把a[1]赋给临时变量temp,如果a[0]大于a[1],将a[0]的值赋给a[1](相当于把a[0]往右挪一个位置),然后把temp插入到第一个位置,否则不动;3、看第i个数与第前面已排序的各个数的大小关系,并把第i个数赋给临时原创 2020-06-13 17:51:38 · 117 阅读 · 0 评论