
数据结构与算法(C++实现)
文章平均质量分 59
wenjiashun
这个作者很懒,什么都没留下…
展开
-
分治策略求解子数组最大并返回下标
//寻找最大子数组的和,分成三种情况来讨论/*在数组A[low...high]中,任何连续子数组A[i...j]的位置有三种一、完全位于数组A[low...mid]中,因此low<=i<=j<=mid二、完全位于数组A[mid+1...high]中,因此mid<i<=j<=mid三、跨越了中点,因此low<=i<=mid<j<=high*/class FindMaxSubarray原创 2017-04-09 11:53:22 · 389 阅读 · 0 评论 -
分治法解决最大子数组问题
利用分治法解决最大子数组问题(对给定的数组得到该数组中具有最大和的子数组)/* * 对于给定的整数数组A,求出数组中具有最大和的子数组,最大和以及左右下标 * 思路:采用分治的方法,将数组分为两部分,则有最大和的子数组共有三种情况 * 在数组左边,在数组右边,跨越数组中点 */#include <iostream>using namespace std;//存放左右边界值以及sum值的结构原创 2015-04-16 00:06:31 · 1786 阅读 · 1 评论 -
二叉搜索树基本功能实现
/*二叉搜索树中的节点类 *Node.h */# ifndef _NODE_#define _NODE_class Node{private: int value;/*节点中存放的元素值*/ Node *parentNode;/*所指向的父节点指针*/ Node *leftChildNode;/*左孩子节点指针*/ Node *rightChildNode;/*右孩子节点指针原创 2014-11-05 13:31:14 · 521 阅读 · 0 评论 -
动态规划_钢条切割最优策略
/* *钢条切割问题:给定一段长度为n英寸的钢条和一个价格表pi(i=1,2,...) *(表示长度为1英寸2英寸...的钢条价格)求切割方案,使得销售收益r最大。 *注意:如果长度为n英寸的钢条价格p[n]足够大,最优解可能就是完全不需要切割 */#include using namespace std;#define MAXLENGTH 10//钢条最大长度int rArr原创 2014-09-26 15:37:20 · 1283 阅读 · 3 评论 -
基数排序
//基数排序#include #include #include #include #define KEYNUMBER 3//整型数的位数#define RADIX 10//每位数字从0到9共有九个#define NUMBER 100using namespace std;int getNumInPos(int,int);void radixSort(int *,int);原创 2014-09-07 19:45:44 · 383 阅读 · 0 评论 -
计数排序
/*计数排序就是在n个数(均小于某一个值k)利用k来进行排序,不涉及到元素之间的比较*/#include #include #include #include #define NUMBER 1000 //数组中元素的范围#define ARRAYLENGTH 1000 using namespace std;void countingSort(const int *,i原创 2014-09-02 21:25:56 · 373 阅读 · 0 评论 -
快速排序的随机化版本
//就是从p到r之间产生一个随机数,i将A[i]和A[r]交换就行#include #include #include #define NUMBER 20using namespace std;int random(int p,int r);//产生p到r之间的随机数int partition(int *sPtr,int p,int r);//将数组进行划分int randomi原创 2014-09-01 21:09:45 · 581 阅读 · 0 评论 -
双向链表的实现
#include "Node.h"#include using namespace std;class LinkedList{private: int listLength;//链表长度 bool isEmpty;//记录链表是否为空表 Node *headNode;public: LinkedList();//构造函数 int getListLength(){return原创 2014-08-31 15:51:23 · 504 阅读 · 0 评论 -
快速排序
//quickSort.cpp/*快速排序用到分治思想,为原址排序,不需要进行merge操作第一步:分解:数组A[p...r]被划分为两个子数组A[p...q]和A[q+1...r],使得A[p...q-1]中元素均小于A[r],A[q+1...r]中元素均大于等于A[r]第二步:解决:通过递归调用快速排序,对子数组A[p...q-1]和A[q+1...r]进行排序第三步:合并:因为子原创 2014-08-28 22:46:39 · 380 阅读 · 0 评论 -
堆排序_最大优先队列
//maxPriorityQueue.cpp//优先队列支持的操作:insert ,maximum,extract,increaseKey,#include #include #include #define NUMBER 100#define NUM 6using namespace std;struct heapType{ int heapArray[NUMBER];原创 2014-08-28 12:47:18 · 376 阅读 · 0 评论 -
堆排序
//heapSort.cpp#include #include #include #define NUMBER 9using namespace std;struct heapType{ int heapArray[NUMBER+1];//数组中存放20个元素,从1到20; int arraySize;//数组长度 int heapSize;//建的堆中元素个数};v原创 2014-08-28 10:22:58 · 406 阅读 · 0 评论