数据结构与算法分析
_Naive_
敲什么代码,睡觉不香吗?
展开
-
快速排序简单实现
#include <stdio.h>#define MAX_NUM 80void quicksort(int* a, int p, int q){ int i=p, j=q; int temp=a[p]; while(i<j){ //越过不小于基准值的数据 while (a[j]>=temp && j>i) j--; if (i原创 2017-12-20 20:47:21 · 199 阅读 · 0 评论 -
链式队列的基本操作与实现
#include <stdio.h>#include <stdbool.h>#include <stdlib.h>#include <iostream>typedef int ElementType;//定义结点typedef struct LinkNode{ ElementType data; struct LinkNode* next;} *StackNode, *Qu原创 2017-11-02 13:46:55 · 2918 阅读 · 0 评论 -
栈的基本操作及实现
#include <stdio.h>#include <stdbool.h>#include <stdlib.h>#include <iostream>typedef int ElementType;//定义结点typedef struct LinkNode{ ElementType data; struct LinkNode* next;} *StackNode, *Q原创 2017-11-02 13:44:39 · 583 阅读 · 0 评论 -
堆排序的过程及简单实现
堆排序(一个迭代的过程) 一、二叉堆的定义 二叉堆是完全二叉树或者是近似完全二叉树。 二叉堆满足二个特性: 1.父结点的键值总是大于或等于(小于或等于)任何一个子节点的键值。 2.每个结点的左子树和右子树都是一个二叉堆(都是最大堆或最小堆)。 当父结点的key总是大于或等于任何一个子节点的key时为最大堆。 当父结点的key总是小于或等于任何一个子节点的key时原创 2017-09-02 20:51:14 · 3871 阅读 · 0 评论 -
堆排序
转载请注明出处:http://blog.csdn.net/ns_code/article/details/20227303前言 堆排序、快速排序、归并排序(下篇会写这两种排序算法)的平均时间复杂度都为O(n*logn)。要弄清楚堆排序,就要先了解下二叉堆这种数据结构。本文不打算完全讲述二叉堆的所有操作,而是着重讲述堆排序中要用到的操作。比如我们建堆的时候可以采用堆转载 2017-08-31 13:22:05 · 192 阅读 · 0 评论 -
直接插入排序的最简单实现
代码源(我的仓库): https://github.com/UnderADome/DataStructure/blob/master/%E7%9B%B4%E6%8E%A5%E6%8F%92%E5%85%A5%E6%8E%92%E5%BA%8F.c#include <stdio.h>int main(void){ int n; scanf("%d", &n); in原创 2017-08-25 20:43:48 · 370 阅读 · 0 评论 -
直接插入排序的演示过程
代码源(我的仓库):https://github.com/UnderADome/DataStructure/blob/master/%E7%9B%B4%E6%8E%A5%E6%8F%92%E5%85%A5%E6%8E%92%E5%BA%8F%E6%BC%94%E7%A4%BA.html<!DOCTYPE html"> <html> <style><!-- body{margin:0;paddi原创 2017-08-25 20:49:29 · 1578 阅读 · 0 评论 -
希尔排序的简单实现及理解思路
有些书上对排序这些内容的讲解比较抽象,个人觉得对排序的理解,最简单的方式就是把现成的代码拿来直接运行,然后用一些数据去测试,把每一步的结果都放出来,结合书上讲解的内容及每一步测试的结果仔细体会。#include<stdio.h>int main(void){ int a[] = {81,94,11,96,12,35,17,95,28,58,41,75,15}; int n =原创 2017-08-29 17:55:09 · 944 阅读 · 0 评论 -
深度优先搜索(Depth-First-Search)
个人觉得深度优先搜索理解起来比广度优先搜索会难一点。 广度优先搜索直接寻找与当前节点最接近的所有节点,而深度优先搜索则有回溯的过程,采用的搜索方法的特点是尽可能先对纵深方向进行搜索。过程设x是当前被访问顶点,在对x做过访问标记后,选择一条从x出发的未检测过的边(x,y)。若发现顶点y已访问过,则重新选择另一条从x出发的未检测过的边,否则沿边(x,y)到达未曾访问过的y,对y访问并将其标原创 2015-08-04 23:42:16 · 583 阅读 · 0 评论 -
[拓展]杭电1003(最大子数组问题)
就题目本身,不考虑时间限制,解法是很多的 首先 可以暴力求解,用三重循环解决 优化一次 省略一次循环,这里给出一段代码(在杭电上超时,还是需要进一步优化)#include <stdio.h> int MaxSum(int* A,int n,int* i,int* j) { int maximum=-100000,sum,t,p; for (*i=0;*i<原创 2015-08-13 22:40:08 · 513 阅读 · 0 评论 -
判断一个数为回文数的最简单实现
代码的核心就在于将一个数子一步步从个位数拆分开来,然后再将拆分得到的数字从高位向低位加起来。 如果得到的数字与原来的数字相等,则判断为回文数#include <stdio.h>int main(void){ int val;//存放待判断的数据 int m; int sum = 0; printf("输入数字\n"); scanf ("%d", &val)原创 2017-12-20 21:52:57 · 351 阅读 · 0 评论