
算法导论
文章平均质量分 77
v2nero
这个作者很懒,什么都没留下…
展开
-
算法导论C语言实现: 算法基础
2.1 插入排序#include #include #define TRACE_SUBSTEPS 1void func2_1() { int A[] = {5, 2, 4, 6, 1, 3, 10, 3, 5}; int key = 0; int j = 0, i = 0, k = 0; //============print sub title==========原创 2013-06-30 14:46:43 · 1081 阅读 · 1 评论 -
算法导论C语言实现: 红黑(red-black tree)
一、五条性质1. Every node is either red or black.2. The root is black.3. Every leaf (NIL ) is black.4. If a node is red, then both its children are black.5. For each node, all simple paths from th原创 2014-02-13 19:41:33 · 1280 阅读 · 1 评论 -
算法导论C语言实现: 二叉搜索树(binary tree)
1. 源代码ia_binarytree.h#ifndef __IA_BINARY_TREE_H__#define __IA_BINARY_TREE_H__#include typedef struct _binary_tree_node_t { int key; struct _binary_tree_node_t *p; struct _binary_tree_nod原创 2014-01-05 22:38:58 · 1890 阅读 · 0 评论 -
算法导论C语言实现: 基本数据结构
1 stack头文件#ifndef __IA_STACK_H__#define __IA_STACK_H__#include typedef struct _iastack_t { int top; int size; int *data;} iastack_t;//return 0 for success// -1 for errorint iasta原创 2013-12-12 11:15:08 · 698 阅读 · 0 评论 -
算法导论C语言实现: 计数排序
#include //COUNTING-SORT//k: 0-kvoid COUNTING_SORT( __in sortdata_i_t *A, __out sortdata_i_t *B, __in int k){ int *C = (int *)malloc(sizeof(int)*(k + 1)); int i = 0; int j = 0; for (i = 0原创 2013-12-03 17:06:52 · 783 阅读 · 0 评论 -
算法导论C语言实现: 快速排序
#include //PARTITIONint PARTITION(int *A, int p, int r){ int x = A[r]; int i = p - 1; int j = p; int tmp = 0; for (j = p; j < r; ++j) { if (A[j] <= x) { ++i; tmp = A[i]; A[i] = A原创 2013-12-03 11:59:12 · 709 阅读 · 0 评论 -
算法导论C语言实现: 堆排序
1. 源代码#include typedef struct _heap_t { int length; //array length int size; //heap size int *data;} heap_t;#define PARENT(i) ((i-1)/2)#define LEFT(i) (2*i + 1)#define RIGHT(i) (2*i + 2)原创 2013-12-03 10:18:09 · 724 阅读 · 0 评论 -
算法导论C语言实现: 分治策略 -- 矩阵乘法的Strassen算法
先直接粘Code4_2.c#include #include #include "strassen.h"void print_mutrix(const int *A, int r, int c){ int i, j; printf("-----------------------------------\n"); for (i=0; i < r; ++i) { for原创 2013-11-15 18:03:32 · 4888 阅读 · 0 评论 -
算法导论C语言实现: 分治策略 -- 最大子数组问题
4.1 最大子数组问题#include //FIND-MAX-CROSSING-SUBARRAYstatic void find_max_crossing_subarray( __in const int *A, __in int low, __in int mid, __in int high, __out int *max_left_index, __out int原创 2013-08-25 16:10:58 · 1239 阅读 · 0 评论 -
[原创]从1亿个数据中找出前100个最大值
从一亿个数据中找出前100个最大值方法一:> 新建一100个红黑树节点,将输入前100个保存进去,然后全部插入红黑树T> 遍历剩下的所有输入,对每一个输入值,如果值大于红黑树中最小值,则删除最小值节点,然后修改被删除节点的值为当前输入,然后插入红黑树。复杂度为n*lg(m), n为输入数据条数,m为输出数据条数方法二:将红黑树替换成最小堆,每插入一条数据,只需要运行...原创 2018-09-01 01:52:46 · 9291 阅读 · 0 评论