算法导论
qq_36393555
这个作者很懒,什么都没留下…
展开
-
算法导论——插入排序
为了督促自己看这本书,以后会把这本书的算法和题目都用C++实现一遍。下面是本书第一个算法——插入排序,由于才开始学C++,所以可能会有比较多的C的痕迹,估计后面会好点。因为自己也在刷C++ Primer这本书。#includeusing namespace std;int main(){ int a[20]; int n,key; cout cin >原创 2016-11-13 20:51:40 · 291 阅读 · 0 评论 -
算法导论—4.1-5
使用如下思想为最大字数组设计一个非递归的、线性时间的算法。从数组的左边界开始,由左至右处理,记录到目前为止已经处理过的最大字数组。若已知A【1....j】的最大字数组,基于以下性质将解扩展为A【1....j+1】的最大字数组:A【1....j+1】的最大字数组要么是A【1....j】的最大字数组,要么是某个子数组A【i....j+1】(1A【1....j】最大字数组的情况下,可以在线性时间内找出形原创 2017-02-01 10:04:55 · 1597 阅读 · 0 评论 -
算法导论——栈
补了点C++primer,会写一点简单的class了,然后马不停蹄用C++实现一下栈和队列。这一篇是栈,队列在下一篇。才学class难免不好看,但是用的多了就好了。我不仅写了导论上的3个函数,还写了一些别的,不过都是差不多的,简单。头文件stack.h如下:#pragma once#ifndef _MY_STACK_H #define _MY_STACK_H#d原创 2017-02-14 16:09:44 · 282 阅读 · 0 评论 -
算法导论——最大子数组
之前都在准备考试,寒假还是继续学习。除了家里打扫卫生,似乎也确实没什么事。多看书,多写代码,总能提高的。坚持。。。。#include typedef struct { int low; int high; int sum;}OP; OP findmaxcrossingsubarray(int * a, int low, int high){ OP pa; in原创 2017-01-21 14:12:51 · 253 阅读 · 0 评论 -
算法导论——快速排序
思路:(1).分解:数组A【p...r】被划分为两个(可能为空)子数组A【p...q-1】和A【q+1...r】,使得A【p...q-1】中的每一个元素都小于等于A【q】,而A【q】也小于等于A【q+1...r】中的每个元素。其中,计算下标q也是划分过程的一部分。(2)解决:通过递归调用快速排序,对子数组A【p...q-1】和A【q+1...r】进行排序。(3)合并:因为子数组都是原址排序原创 2017-02-10 11:23:37 · 286 阅读 · 0 评论 -
算法导论---堆排序
#includeusing namespace std;void heapsort(int *a, size_t size);void buildheap(int *a, size_t size);void maxheapify(int *a, size_t n,size_t i);int main(){ int a[11] = { -1,4,1,3,2,16,9,10,14,原创 2017-02-09 22:31:08 · 236 阅读 · 0 评论 -
算法导论——归并排序
前面写过选择排序和插入排序,下面是归并排序,如下:#includeusing namespace std;int main(){ int a[20], a1[10], a2[10]; int n, s = 0,t=0; const int sentry = 9999; cout << "input the size of array:" << endl; cin >原创 2016-12-19 22:02:56 · 304 阅读 · 0 评论 -
算法导论——2.1-2选择排序
题目:考虑排序存储在数组A中的n个数:首先找出A中的最小元素并将其和A[1]中的元素交换。接着,次大值和A[2]交换。以此类推。#includeusing namespace std;int main(){ int a[100]; int n, t = 0; cout << "input the size of array:" << endl; cin >> n;原创 2016-12-19 20:07:03 · 301 阅读 · 0 评论 -
算法导论——2.1-4
最近还找到一种方法:#includeusing namespace std;int main(){ size_t n; cin >> n; int a[4], b[4],c[5]; cout << "input a[]:" << endl; for (int i = 0; i < n; ++i) cin >> a[i]; cout << "input b[]:" <<原创 2016-11-15 17:18:57 · 444 阅读 · 0 评论 -
算法导论——2.3-2无哨兵情况下的归并排序
没有哨兵时,可以设置一个判断,只要2个分数组的一个到达底端就把另一个的后续元素赋给原数组。具体如下:#includeusing namespace std;const int sentry = 999999;void Merge(int ia[], size_t p, size_t q, size_t r){ int a1[10], a2[10]; size_t len1 =原创 2016-12-21 19:41:22 · 623 阅读 · 0 评论 -
算法导论——2.1-3线性查找
不用bool也能写,但是我灵机一动,用了一下,看上去没什么用。不过熟悉一下bool还是不错的。原创 2016-11-15 18:04:54 · 412 阅读 · 0 评论 -
算法导论——队列
头文件queue.h如下:#pragma once#ifndef _QUEUE_H#define _QUEUE_H#define SIZE 100class my_queue{private: using pos = char; typedef size_t poa;public: void initqueue(my_queue &q); bool queueempty(原创 2017-02-15 21:40:26 · 282 阅读 · 0 评论