![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构与算法
文章平均质量分 55
paulery2012
这个作者很懒,什么都没留下…
展开
-
深入浅出理解[递归]
说递归之前,先说一说循环。 循环 1、应用场景:在一定范围内重复运算2、条件:需要设置初始值、中止条件。 优点:相对递归效率高缺点:涉及到树的操作稍复杂原创 2014-09-15 22:22:18 · 1021 阅读 · 0 评论 -
深入浅出理解排序算法之-归并排序
#include void Merge(int array[],int p,int q,int r){ int i,j,k,n1,n2; n1 = q - p + 1; // 左半部分的长度 n2 = r - q; //右半部分的长度 // 1.将原数组的左右部分取出来放到2个数组此处原创 2014-09-30 22:04:06 · 683 阅读 · 0 评论 -
深入浅出理解排序算法之-冒泡排序
#include <iostream>void Swap(int &a,int &b){ int temp; temp = a; a = b; b = temp;}/* 冒泡排序 基本思想:第一趟冒泡得到一个关键字最小的记录,第二趟得到次小值...针对每一趟:两两相邻纪录的关键字,如果反序则交换直到没有反序为止 特点:时间效率,总共n-1趟冒泡,对j个记录的表进行一趟冒泡需要j-1次关键字比较,空间效率:仅用一个辅助单元(临时变量)*/原创 2014-09-30 21:57:30 · 806 阅读 · 0 评论 -
深入浅出理解排序算法之-希尔排序
#include <stdio.h>/* 希尔排序 基本思想:希尔排序又称为缩小增量排序,对简单插入排序的优化。(外部分组gap,组内部插入排序!!) 特点:一种不稳定的排序 */void ShellSort(int array[],int len){ int i,j; int gap;// gap int temp; for (gap = len/2 ; gap >0 ; gap = gap/2){ // 核心就是 array[j+gap]与 array[原创 2014-09-30 22:00:17 · 748 阅读 · 0 评论 -
深入浅出理解排序算法之-选择排序
#include <iostream>/* 选择排序 基本思想:从后面每次找到最小的一位放到前面已排序好的最后一位 特点:时间复杂度O(n^2)*/void SelectSort(int array[],int n){ int i,j; int temp =0,flag = 0;原创 2014-09-30 21:59:00 · 722 阅读 · 0 评论 -
深入浅出理解排序算法之-堆排序
#include <iostream>void Swap(int &a,int &b){ int temp; temp = a; a = b; b = temp;}// 维护最小堆void AdjustMinHeap(int *a,int pos,int len){原创 2014-09-30 22:01:19 · 839 阅读 · 0 评论 -
深入浅出理解排序算法之-插入排序
#include <iostream>/* 插入排序 基本思想:将记录插入到已排序好的有序表中 特点:一种稳定的排序方法,时间复杂度O(n^2) */void InsertSort(int array[],int len){ int i,j; int temp;原创 2014-09-30 22:01:45 · 1036 阅读 · 0 评论 -
strcpy与strncpy
strcpy 已经过时了,公司一面一般不用了。strncpy多了一个参数n,也就是复制的字节数,2个函数原型如下: char*strcpy(char *dst,const char *src);char*strncpy(char *dst,const char *src,size_t)原创 2014-10-08 19:13:06 · 941 阅读 · 0 评论 -
常见函数strlen、strcmp、strstr原型实现
数组元素的结束符为'\0',串的结束符为NULL 一、strlen #include <iostream>using namespace std; long h_strlen(constchar*str){ assert(str!=NULL); const char *s = str; while (*s++); return (s - str - 1);}原创 2014-10-08 19:16:13 · 1416 阅读 · 0 评论 -
memcpy内存拷贝及优化策略图解
#include <iostream>using namespace std; //不安全的内存拷贝(当源内存地址与目标内存地址重叠时会产生错误)void h_memcpy(void*src,void *dst,intsize){ if (src == NULL|| dst == NULL) { return; }原创 2014-10-08 16:13:17 · 3378 阅读 · 0 评论 -
递归和非递归的二分查找
思路很简单,代码注释已标注 #include <stdio.h> //递归二分查找int binarySearch(int*start,int *end,intfindData){ if (start > end) { // 递归边界条件 return -1; }原创 2014-10-07 22:43:56 · 801 阅读 · 0 评论 -
C系列函数原型之-StrStr(char *str,char *subStr)的实现
#include <iostream>char *Mystrstr(char *str,char *subStr){ while (*str != '\0' ) { char *p = str; char *q = subStr; char *res = NULL; if (*p == *q) { res = p; while (*q != '\0' && *p == *q)原创 2014-09-22 11:43:37 · 3604 阅读 · 0 评论 -
谈谈数据结构和算法这2个好基友[数据结构和算法]
本文为小甲鱼数据结构和算法教学视频的学习笔记第一章:谈谈数据结构和算法这2个好基友 一、聊聊数据结构1、为什么学数据结构?编程能力有质的飞越,不再停留在调用现成的API,做一个上档次的程序员。2、什么是数据结构?数据结构是一门研究非数值计算的程序设计问题中的操作对象,以及他们之间的关系和操作等相关问题的学科。思考:好吧,简单来说程序设计 =数据结构 + 算法,数原创 2014-05-26 23:41:27 · 1167 阅读 · 0 评论 -
深入浅出理解[二叉树的构建、先中后序遍历、树的深度、左右子树互换]
二叉树本来就是递归定义的,如果对递归还不是特别了解,建议看一下《001.深入浅出解释[递归]》 写一个递归函数很简单,只需要记住下面2点: 1、递归中止条件:对于二叉树来说一般是node==null的时候判断到了叶子结点 2、递归函数:;描述一个中间过程,然后用代码实现,调用自身的时候传递的参数就是你想要递归的方式。 下面的代码就是一个二叉树的创建、先中后序遍历、树的深度、左右子树的互换的过程原创 2014-09-16 11:53:29 · 2403 阅读 · 0 评论 -
时间复杂度和空间复杂度[数据结构]
第二章:时间复杂度和空间复杂度 1、为什么要学习时间复杂度和空间复杂度?你说一个算法好另外一个算法不好,有什么判断依据?哪个算法效率高?怎么判断?那么就要学习时间和空间复杂度了。思考:学习每一个知识之前都应该要考虑一下为什么要学习,学了有什么用处,什么场景下去用。2、算法的效率高一般是指算法的执行时间,度量一个算法的执行时间有2种方式:事后统计法:需要编写测原创 2014-05-27 08:50:08 · 1115 阅读 · 0 评论 -
深入浅出理解排序算法之-快速排序
#include /* 快排:快速排序 基本思想:通过比较关键词、交换纪录,以某个记录为界(也称为支点),将待排序列氛围2个部分。一部分所有记录的关键字大于等于支点纪录的关键字,另一部分所有记录的关键词小于支点纪录的关键字。将待排序列按照关键字以支点纪录分成两部分的过程,成为一次划分,对各部分不断划分,直到整个序列按照关键字有序。记忆:不稳定的排序方法,时间复杂度O(n原创 2014-09-30 22:05:07 · 552 阅读 · 0 评论