![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法程序设计
文章平均质量分 63
quentain
简单做人,勤奋做事!
展开
-
算法实现(3)二分搜索技术
二分搜索算法是运用分支策略的典型例子。给定已排好序的n个元素a[0:n-1],现要在这个n个元素中找出一特定元素x。算法基本思想:是将n个元素分成个数大致相同的两半,取a[n/2]与x作比较。如果x=a[n/2],则找到x,算法终止;如果xa[n/2],则只在数组a的右半部继续搜索x。具体算法用c语言实现的代码:#include "stdafx.h"//a[]是一个已经排好序的数原创 2015-05-20 11:59:24 · 1235 阅读 · 2 评论 -
数据结构之排序(一)冒泡排序
package com.xaut.zyq;import java.util.Arrays;//冒泡排序的具体思想和编程/* * 冒泡排序一种交换排序,它的基本思想是:两两比较相邻记录的关键字,如果反序则交换,直到没有反序的记录为为止。 */public class BubbleSort { public static void main(String[] args) { i原创 2015-10-26 13:45:07 · 454 阅读 · 0 评论 -
数据结构之排序(五)堆排序
package com.xaut.zyq;import java.util.Arrays;//堆排序就是简单选择排序的一种改进,这种改进的效果是非常明显的。/* * 堆是具有下列性质的完全二叉树,每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆; * 或者 每个结点的值都小于或等于其左右孩子结点的值,称为小顶堆。 * 堆排序的基本思想就是将待排序的序列构造成一个大顶堆,此时,原创 2015-10-26 13:52:04 · 326 阅读 · 0 评论 -
数据结构之排序(二)选择排序
package com.xaut.zyq;import java.util.Arrays;//简单选择排序算法,就是通过n-i次关键字之间的比较,从n-i+1个记录中选出关键字最小的记录,//并和第i(1<i<n)个记录交换之。//API(Application Programming Interface,应用程序编程接口)查阅api文档public class SelectSort原创 2015-10-26 13:46:41 · 409 阅读 · 0 评论 -
数据结构之排序(四)希尔排序
package com.xaut.zyq;import java.util.Arrays;//希尔排序/* * 我们需要采取跳跃分割的策略:将相距某个“增量”的记录组成一个子序列,这样才能保证在子序列内分别进行直接 * 插入排序后得到的结果是基本有序而不是局部有序。 */public class ShellSort { public static void main(String原创 2015-10-26 13:50:42 · 372 阅读 · 0 评论 -
数据结构之排序(三)直接插入排序
package com.xaut.zyq;import java.util.Arrays;//直接插入排序算法的思想:将一个记录插入到已经排好序的有序表中,从而得到一个新的,记录数增1的有序表。public class InsertSort { public static void main(String[] args) { int a[]={0,5,3,4,6,2}; Inse原创 2015-10-26 13:49:06 · 454 阅读 · 0 评论 -
Java中的异常处理中的需要知道的异常类
package com.zhao.throwtest;public class DivTest {public static void main(String[] args) { try { int a=Integer.parseInt(args[0]); int b=Integer.parseInt(args[0]); int c=a/b; System.out.prin原创 2015-09-22 18:01:56 · 738 阅读 · 0 评论 -
约瑟夫环问题
约瑟夫环问题问题描述:n个人(编号1~n),从1开始报数,报到m的退出,剩下的人继续从1开始报数。求胜利者的编号。数学解法复杂度:O(n)。无论是用链表实现还是用数组实现都有一个共同点:要模拟整个游戏过程,不仅程序写起来比较烦,而且时间复杂度高达O(nm),当n,m非常大(例如上百万,上千万)的时候,几乎是没有办法在短时间内出结果的。我们注意到原问题仅仅是要求出最后的胜利者的序号,而不是要原创 2015-11-28 09:12:36 · 1846 阅读 · 5 评论 -
动态规划之01背包问题(最易理解的讲解)
转自:http://blog.csdn.net/mu399/article/details/772281001背包问题,是用来介绍动态规划算法最经典的例子,网上关于01背包问题的讲解也很多,我写这篇文章力争做到用最简单的方式,最少的公式把01背包问题讲解透彻。01背包的状态转换方程 f[i,j] = Max{ f[i-1,j-Wi]+Pi( j >= Wi ), f[i-1,j]转载 2016-04-13 08:10:41 · 578 阅读 · 0 评论 -
Java中字符串反转的七种方法
突然在想,确实是浮躁了字符串反转的七种方法:在线代码:package test1;import java.util.Stack;public class Reverse { //方法一:递归+字符串截取;不断的进行二分截取,递归返回; /* * 【时间复杂度:】渐渐跟下去就是n,n/2,n/4,....n/2^k,其中k就是循环的次数 由于你n/原创 2016-04-13 14:19:33 · 10232 阅读 · 1 评论 -
程序员必须掌握的8大排序算法(排序舞蹈)
Java常用排序算法/程序员必须掌握的8大排序算法前几天在微信上看到这两篇博文,非常有意思,排序舞蹈真的做的很不错,很形象!Java常用排序算法/程序员必须掌握的8大排序算法(上)http://mp.weixin.qq.com/s?__biz=MzIxMTE0ODU5NQ==&mid=2650236717&idx=1&sn=82b41a8a2b6c317a552ee2df6fe原创 2016-05-16 17:02:12 · 4067 阅读 · 1 评论 -
牛客堂常见面试题精讲(一)5
数组中哪个数出现次数大于一半?package com.zhao.niuke;public class Problem_06_FindMajority { //数组中的哪个元素出现次数大于一半 //int[] arr = { 1, 2, 3, 1, 1, 2, 1 }; public static void printHalfMajor(int[] arr) { int cand原创 2015-09-22 15:36:05 · 377 阅读 · 0 评论 -
牛客堂常见面试题精讲(一)4
根据最长回文子序列处理字符串代码如下:package com.zhao.niuke;public class Problem_04 { public static String getPalindrome(String str, String strlps) { //str是给定一个字符串 //strlps是最长回文子序列在任意位置添加字符后整体都是回文串的其中的一种结果原创 2015-09-21 21:41:40 · 493 阅读 · 0 评论 -
算法实现(4)整数划分问题
将正整数n表示成一系列正整数之和, n=n1+n2+·····+nk正整数n的这种表示称为正整数n的划分。正整数n的不同划分个数成为正整数n的花分数,记为P(n)。 在正整数n的所有不同的划分中,将最大加数n1不大于m的划分个数记作q(n,m).可以建立q(n,m)的如下递归关系。(1)q(n,1)=1,n>=1 当最大加数n1不大于1时,任原创 2015-05-20 12:18:14 · 754 阅读 · 1 评论 -
算法实现(2)有重复元素的排列问题
这个算法思想其实就是跟全排列的算法思想类似,主要区别是对重复元素的处理。见ok这个函数。算法设计:给定n及待排列的n个元素。计算出这n个元素的所有不同排列。以下用C语言实现算法的代码:#include "stdafx.h" void perm(char list[], int k, int m);void swap(char &a, char &b);int ok(char li原创 2015-05-20 11:49:11 · 2236 阅读 · 1 评论 -
算法实现(1)排列问题
设R={r1,r2,...,rn}是要进行排列的n个元素,Ri=R-{ri}.集合X中元素的全排列记为Perm(X)。(r i)Perm(X)表示在全排列Perm(X)的每一个排列前加上前缀ri得到的排列。R的全排列可归纳定义如下: 当n=1,Perm(R)=(r),其中r是集合R中唯一的元素; 当n>1时,Perm(R)由(r1)Perm(R1),(r2)Perm原创 2015-05-20 11:31:33 · 884 阅读 · 0 评论 -
递归和分治策略的算法总结
前面说几句看到一篇关于企业需要什么人才的文章,里面写的是:一切都是关于选择,“你想过普通的生活,就会遇到普通的挫折。你想过上最好的生活,就一定会遇上最强的伤害。”“如果你受不了,想过普通人的生活,可以尝试跳到其他行业。这并不是什么丢人的事情。”言归正传1.二分搜索技术2.大整数乘法3.棋盘覆盖4.合并排序和快速排序5.循环赛日程表都有用到递归的思想:排列问题的思想就原创 2015-05-27 19:25:18 · 1891 阅读 · 1 评论 -
算法实现(7)合并排序
合并排序算法是分值策略实现对n个元素进行排序的算法。其基本思想是:将待排序元素分成大小大致相同的两个子集合,分别对两个子集合进行排序,最终将排好序的子集合合并成所要求的排好序的集合。合并排序的算法实现如下;#include "stdafx.h"#include void Merge(int c[],int d[],int l,int m,int r);int MergeSort(in原创 2015-06-01 20:44:48 · 738 阅读 · 1 评论 -
算法实现(5)大整数乘法
通常,在分析算法的计算复杂性时,都将加法和乘法运算当作基本运算来处理,即将执行一次加法或乘法运算所需的计算时间当作一个仅取决于计算机硬件处理速度的常数。这个假定仅在参加运算的整数能在计算机硬件对整数的表示范围内直接处理时才是合理的。然而,在某些情况下,需要处理很大的整数,它无法再计算机硬件能直接表示的整数范围内进行处理。若用浮点数来表示它,则只能近似的表示它的大小,计算结果中的有效数字也受到限制。原创 2015-06-01 18:25:28 · 2286 阅读 · 0 评论 -
算法实现(6)棋盘覆盖
在一个2k×2k 个方格组成的棋盘中,恰有一个方格与其他方格不同,称该方格为一特殊方格,且称该棋盘为一特殊棋盘。在棋盘覆盖问题中,要用图示的4种不同形态的L型骨牌覆盖给定的特殊棋盘上除特殊方格以外的所有方格,且任何2个L型骨牌不得重叠覆盖。当k>0时,将2k×2k棋盘分割为4个2k-1×2k-1 子棋盘(a)所示。特殊方格必位于4个较小棋盘之一中,其余3个没有特殊方格。为了将这3个原创 2015-06-01 20:12:49 · 663 阅读 · 1 评论 -
牛客堂常见面试题精讲(一)2
转圈打印矩阵的算法思想:package com.zhao.niuke;public class Problem_01_PrintMatrixSpiralOrder { public static void spiralOrderPrint(int[][] matrix) { int tR = 0;//左上角行标(起始坐标) int tC = 0;//列标 int dR = m原创 2015-09-21 11:43:02 · 455 阅读 · 0 评论 -
牛客堂常见面试题精讲(一)1
顺时针旋转打印矩阵:算法代码:package com.zhao.niuke;public class Problem_02_RotateMatrix { public static void rotate(int[][] matrix) { int tR = 0;//矩阵左上角第一个元素的起始位置行标 int tC = 0; //列标 int dR = matrix.le原创 2015-09-21 11:10:49 · 864 阅读 · 0 评论 -
牛客堂常见面试题精讲(一)3
如何实现“之”字形打印矩阵算法代码实现:package com.zhao.niuke;public class Problem_03_ZigZagPrintMatrix { public static void printMatrixZigZag(int[][] matrix) { int tR = 0;//左上角起始行标 int tC = 0;//左上角起始列标 int原创 2015-09-21 20:27:34 · 507 阅读 · 0 评论 -
【算法】如何用随机函数rand5来构造随机函数rand7
常规方法今天公司有一个面试题是这样的:假如有一个函数rand5能等概率生成1 - 5 之间的整数,如何利用rand5来实现rand7?rand7函数的要求是能够等概率生成1 - 7之间的整数。说实话我自己也不是很清楚。这个问题很经典的。carreercup那本书上有个常见的解法,我记得算法大概是这样的,用PHP写写吧:原创 2016-05-09 15:56:02 · 1342 阅读 · 0 评论