
算法
yangsong95
思想不止
展开
-
归并排序
归并排序(MERGE-SORT)采用了分治法的思想。分而治之,无限划分,直至最小单元。时间复杂度空间复杂度稳定性平均O(nlog2n) 最好O(nlog2n) 最坏O(nlog2n)O(1)稳定Python:def MergeSort(lists): if len(lists) <= 1: return lists num=int(len(lis...原创 2018-09-26 11:17:38 · 152 阅读 · 0 评论 -
简单选择排序
每一趟在n-i+1(i=1,2,…,n-1)个记录中选取最小的记录作为有序序列的第i个记录。时间复杂度O(n2)#include <iostream>#include <cstdlib>//顺序表结构#define MAXSIZE 10 //要排序数组个数最大值typedef struct{ int r[MAXSIZE + 1]; //存储要排序数组,r[...原创 2019-09-22 09:14:55 · 299 阅读 · 0 评论 -
直接插入排序(Straight Insert Sort)
将一个记录插入到已经排好序的有序表中,从而得到一个新的、记录数增1的有序表。时间复杂度O(n2)#include <iostream>#include <cstdlib>//顺序表结构#define MAXSIZE 10 //要排序数组个数最大值typedef struct{ int r[MAXSIZE + 1]; //存储要排序数组,r[0]作为哨兵或临...原创 2019-09-22 09:06:32 · 468 阅读 · 0 评论 -
二分查找
前提是线性表是有序的。时间复杂度为O(logn)#include <iostream>#include <cstdlib>//顺序表结构#define MAXSIZE 10 typedef struct{ int r[MAXSIZE + 1]; //存储数组,r[0]作为哨兵或临时变量 int length; //记录顺序表长度}SqList;...原创 2019-09-22 08:52:37 · 164 阅读 · 0 评论 -
希尔排序(Shell Sort)
是直接插入排序的改良版。直接插入排序在记录本身有序和记录比较少时,比较高效。希尔排序则用来创造这两个条件。排序时采用跳跃分割的策略:将相距某个增量(increment)的记录组成一个子序列,保证在子序列内分别进行直接插入排序后的结果是基本有序而不是局部有序。#include <iostream>#include <cstdlib>//顺序表结构#define...原创 2019-09-21 00:34:55 · 168 阅读 · 0 评论 -
堆排序(Heap Sort)
基本思想是(假设利用大顶堆):将待排序的序列构造成一个大顶堆。此时,根节点就是序列的最大值。将其与堆数组末尾元素交换,然后将剩余的n-1个序列重新构建大顶堆,得到n个元素中的次大值…反复执行,便得到一个有序序列。时间复杂度O(nlogn),空间复杂度O(1),仅交换时需要一个暂存单元。比较与交换时跳跃式进行,因此不稳定。#include <iostream>#includ...原创 2019-09-21 00:17:58 · 158 阅读 · 0 评论 -
归并排序(Merging Sort)
基本思想:假设待排序列含有n个元素,可以看成n个有序的子序列,每个字序列的长度为1,然后两两归并,得到n/2(向上取整)个长度为2或1的有序子序列;再两两归并…,重复,直到得到一个长度为n的有序序列,即为(2路归并排序)。需要递归logn次,且每次不要O(n)的时间,因此总的时间复杂度为O(nlogn),为最好、最快即平均的时间性能。空间复杂度为O(n)是一种稳定 的排序算法。#incl...原创 2019-09-20 23:51:06 · 404 阅读 · 0 评论 -
string类型大整数相加
#include <iostream>#include <string>#include <algorithm>using namespace std;string sum(string str1, string str2) { if (str1.size() == 0) { return str2; } if (str2.size() ...原创 2019-09-11 17:49:47 · 1024 阅读 · 0 评论 -
返回一个数列中倒数第二小的数
#include<iostream>#include<string>#include<vector>#include<algorithm>#include<functional>using namespace std;int find_second_min(int arr[]){ int len = 0; ...原创 2019-09-05 10:41:39 · 1411 阅读 · 1 评论 -
快速排序(Quick Sort)
基本思想:通过一趟排序将待排记录分割成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,然后分别对这两部分记录继续排序,最终达到整个序列有序。#include <iostream>#include <cstdlib>//顺序表结构#define MAXSIZE 10 //要排序数组个数最大值typedef struct{ int r[MAXS...原创 2019-09-04 19:19:59 · 185 阅读 · 0 评论 -
将以字符串输入的阿拉伯数字转换为中文输出
例如:输入n 输出“18” “十八”“103” “一百零三”“13000” “一万三千”“10002000” "一千万零二千”(0<n<100000000)#include <iostream>#include <string>...原创 2019-08-08 16:34:36 · 2568 阅读 · 1 评论 -
怎样在子弹数量一定的前提下达到最大的杀伤效果
战场上一般以摧毁敌方的有生力量为目的,不同的目标,彻底进行摧毁需要消耗不同弹药量,各个目标的杀伤价值也不同。现有一款一次带弹1000(total)发的重机枪,怎样在弹药消耗完时达到最大的战场杀伤效果。目标 i摧毁消耗弹药量(发)n杀伤价值 v1200626001031003430055450861504解题思路:...原创 2019-06-05 21:55:03 · 239 阅读 · 0 评论 -
五大思想
尝试用案例来学习。分治1、归并排序 - 净的博客 - 优快云博客https://blog.youkuaiyun.com/yangsong95/article/details/82850761动态规划最优决策表(二维表):行:问题的不同阶段列:问题的状态f(n,m)=max{f(n-1,m), f(n-1,m-w[n])+P(n,m)}贪心做出在当前看来最好的选择,不会影响之前的决策。局...原创 2019-04-03 10:54:37 · 1201 阅读 · 0 评论 -
字符数组实现两大数相加
大数即超过系统整型数据类型表示范围的大整数。C实现#include "stdio.h" //===================头文件#include "string.h"void main() //===================主函数{ int i,temp,m,n,bigger; ...原创 2018-10-15 09:39:29 · 2642 阅读 · 1 评论 -
冒泡排序(BubbleSort)
两两比较相邻记录,如果反序则交换,直到没有反序的记录。时间复杂度O(n2)#include <iostream>#include <cstdlib>//顺序表结构#define MAXSIZE 10 //要排序数组个数最大值typedef struct{ int r[MAXSIZE + 1]; //存储要排序数组,r[0]作为哨兵或临时变量 int le...原创 2019-09-22 09:20:46 · 555 阅读 · 0 评论