算法
John_Lan_2008
这个作者很懒,什么都没留下…
展开
-
求一数组前k大的所有数
使用分治和递归算法 - 求数组前k大的所有数(不事先排序)#include <iostream>using namespace std;void PrintArray(int arr[], int s, int e){ for (int i = s; i < e; i++) { cout << arr[i] << ' '; } cout << endl;}原创 2017-08-18 16:02:21 · 1177 阅读 · 0 评论 -
数组的旋转
一个含有n个元素的数组向左旋转i次原理描述:假设有一个数组为[ 0 - n ],要向左旋转i次,数组可以被i分割为两部分[ 0 - (i-1) ]和[ i - (n-1) ] 两部分。如果把第一部分[ 0 - (i-1)] 反转变为 [ (i-1) - 0 ], 第二部分[ i - (n-1) ] 反转变为 [ (n-1) - i ],现在数组为[ (i-1) - 0 ] [ (n-1)-i ],继原创 2018-02-27 15:24:00 · 941 阅读 · 0 评论 -
二叉树搜索求解背包问题
# -*- coding: utf-8 -*-"""Spyder EditorThis is a temporary script file."""class BinaryTree: def __init__(self, value): self._value = value self._parent_node = None s原创 2018-01-19 21:56:30 · 1283 阅读 · 0 评论 -
二叉树遍历(DFS和BFS)- python
二叉树的遍历算法 深度优先搜索、广度优先搜索和深度优先搜索返回路径class TreeNode: def __init__(self, value): self._value = value self._parent_node = None self._left_node = None self._right_no原创 2018-01-19 14:30:04 · 4359 阅读 · 1 评论 -
冒泡和插入排序 - python
实现一个类似 python类似sorted函数lst = [2, 3, 6, 3, 10, 4]def bubble_sort(lst, fn = lambda a, b: a > b, asc = False): l = len(lst) for i in range(l): j = 0 while (j 1):原创 2018-01-16 15:00:51 · 208 阅读 · 0 评论 -
归并排序
#include <iostream>#define MOD_MERGE // 是否优化 using namespace std;int tempArr[100];#ifndef MOD_MERGEvoid merge(int array[], int left, int right, int middle){ for (int i = left; i <= right; +原创 2016-03-30 20:56:40 · 259 阅读 · 0 评论 -
单向链表的递归反转
单向链表反转的递归实现#include <iostream>// 链表的节点类型 struct LinkNode { int Val; LinkNode * Next; LinkNode() { Next = NULL; } LinkNode(int v) { Val = v; Next = NULL; } };// 链表类型 struct List原创 2016-04-01 12:09:27 · 653 阅读 · 0 评论 -
表达式计算-Python版
运用递归的方法求解普通表达式的值原理示意:表达式 : 项 +或- [项] … 项 : 因子 *或/ [因子] … 因子 :表达式 或 整数(递归终点)注: 以上类似编译原理的语法分析的巴科斯范式(BNF)表示,冒号右边能够推到出左边,也就是左边可以展开为右边的形式,知道不能再展开(遇到终结符)index = 0def expValue(exp):原创 2017-02-08 11:21:01 · 3269 阅读 · 0 评论 -
快速排序-python
def qsort(a, si, ei): if si >= ei: return key = a[si] i = si j = ei while i != j: while i < j and key <= a[j]: j = j - 1 a[i], a[j] = a[j], a[i]原创 2017-02-14 10:58:12 · 783 阅读 · 0 评论 -
最大上升子序列-python
def maxLen(arr): u = [1 for i in range(len(arr))] for i in range(1, len(arr)): for j in range(i): if arr[j] < arr[i]: u[i] = max(u[i], u[j] + 1) return m原创 2017-02-21 17:24:32 · 905 阅读 · 0 评论 -
最长公共子序列-python
class SeqMax: def __init__(self, str1, str2): self.resMatrix = [] self.str1 = str1 self.str2 = str2 self.str1len = len(str1) self.str2len = len(str2)原创 2017-02-24 14:29:52 · 390 阅读 · 0 评论 -
数组排序,奇数在前,偶数在后(二)
第二种解法: 基本思想:先对数组进行分割,分割为两部分:奇数序列和偶数序列, 再利用任何一种排序算法排序。#include <iostream>#include <algorithm>using namespace std;void PrintArr(int *arr, int n){ for (int i = 0; i < n; i++) { cout << ar原创 2017-04-14 13:58:40 · 2422 阅读 · 0 评论 -
数组排序,奇数在前,偶数在后
一个无序整数数组,对它排序,使其前半部分都为奇数有序,后半部分为偶数有序。基本想法:利用插入排序算法,对奇偶子序列分别插入排序。用两个变量把整个数组分割为三个部分,第一个部分为奇数有序子序列,第二部分为偶数有序子序列,第三部分为未排序子序列。使用两个变量进行分割,mid 指向偶数有序子序列的一个元素,end 指向未排序子序列(等待一个个插入前面的奇数有序子序列或偶数有序子序列)。---------原创 2017-04-14 10:59:52 · 9373 阅读 · 2 评论 -
插入排序与快速排序
本文描述了插入排序和快速排序的几种区间划分策咯,参见代码注释import random# 测试数据data = [1,2,3,4,5, 3, 3,6,7,8,9,10,11, 12]# -----------------------------------------------# ---------------- test routine -----------------# -------原创 2018-02-28 15:51:07 · 545 阅读 · 0 评论