算法与编程

关于算法的5个实例(基础)

1.     一列数的规则如下: 1、1、2、3、5、8、13、21、34...... 求第30位数是多少 , 用递归算法实现。

该数列为斐波那契数列,规律为第三位为前两位之和。

  

2.     求表达式的值,写出一种或几种实现方法: 1-2+3-4+……+m

3.     编程实现一个冒泡排序算法

/**
     * 冒泡排序:每次只能确定一位最大的,放置数组末尾 ,下次忽略已经确定的最大值继续比较
     * 优点:稳定
     * 缺点:效率底下(重复相邻数据比较,且每次比较都会进行位置置换)
     * @param arr
     * @return
     */
    public static int[] bubbleSort(int[] arr) {
        int len = arr.length; // 数组长度
        for (int i = 0; i < len; i++) { // 遍历数组,用来限制内循环次数
            for (int j = 1; j < len - i; j++) { // 内循环,依次减少1个次数(即为比较几次,就忽略后几位)
                if (arr[j - 1] > arr[j]) { // 如果前一位大于后一位,即 前>后,需要交换位置
                    int k = arr[j - 1]; // 把前面的先缓存起来
                    arr[j - 1] = arr[j]; // 让前面的等于后一位
                    arr[j] = k; // 后一位等于前一位之前的缓存值
                }
            }
        }
        return arr;
    }

4.     编程实现一个选择排序算法

 /* 选择排序,从当前位(0开始)开始和下一位依次比较,找到最小元素,让当前位和最小元素换位,其他元素不变
       * 继续从当前位的下一位开始,依次查找最小元素并换位,直至最后一位
       * @param arr
       * @return*/
        public static int[] selectSort(int[] arr)
        {
            int len = arr.length;
            for (int i = 0; i < len; i++)
            {
                int min = arr[i]; // 每次都认为当前队列第一位为最小值,进行缓存
                int index = i;       // 缓存最小值(变化)坐标
                for (int k = i + 1; k < len; k++)
                { // 向后比较
                    if (arr[k] <= min)
                    { // 如果后一个小于等于前一个
                        min = arr[k]; // 更换最小值
                        index = k; // 变更最小值坐标
                    }
                }
                if (min == arr[i]) // 相等则不变化,默认保留当前队列第一个为最小
                    continue;
                // 循环完毕,找出了最小值的坐标,即为index,把当前坐标i元素和最小元素换位
                int k1 = arr[i];
                arr[i] = arr[index];
                arr[index] = k1;
            }
            return arr;
        }

5.     编程实现一个插入排序算法

/**
     * 插入排序,默认第一位已经排好序,从第二位开始依次向前比较,确定自己的位置后插入,即前一位小余或等于当前,且后一位大于当前。
     * 插入后,自己新位置后面的元素依次向后移位, 完成一轮插入排序
     * @param arr
     * @return
     */
    public static int[] insertSort(int[] arr) {
        int len = arr.length;
        for (int i = 1; i < len; i++) {
            if (arr[i - 1] > arr[i]) {
                int k = arr[i];
                int j = i;
                while (j > 0 && arr[j - 1] > k) {
                    arr[j] = arr[j - 1];
                    j--;
                }
                arr[j] = k;
            }
        }
        return arr;
    }
时间: 2024-09-30 19:58:42

算法与编程的相关文章

机器学习算法与编程实践之中文文本分类

这周学习了机器学习算法与编程实践第二章--中文文本分类的部分内容.该章以文本挖掘为大背景,以文本分类算法为中心,详细介绍了中文文本分类项目的相关知识点. 一.文本挖掘与文本分类的概念 被普遍认可的文本挖掘的定义如下:文本挖掘是指从大量文本数据中抽取事先未知的.可理解的.最终可用的知识的过程,同时运用这些知识更好的组织信息以便将来参考. 文本挖掘的7个主要领域有:(1)搜索和信息检索,(2)文本聚类,(3)文本分类,(4)Web挖掘.(5)信息抽取,(6)自然语言处理,(7)概念提取. 而文本分类

Java笔试题之《算法与编程》

算法与编程 1.判断身份证:要么是15位,要么是18位,最后一位可以为字母,并写程序提出其中的年月日. 答:我们可以用正则表达式来定义复杂的字符串格式,(\d{17}[0-9a-zA-Z]|\d{14}[0-9a-zA-Z])可以用来判断是否为合法的15位或18位身份证号码. 因为15位和18位的身份证号码都是从7位到第12位为身份证为日期类型.这样我们可以设计出更精确的正则模式,使身份证号的日期合法,这样我们的正则模式可以进一步将日期部分的正则修改为[12][0-9]{3}[01][0-9][

解决拿蛋问题的时候,通过几个shell脚本运算速度对比,体会了算法和编程优化的重要性

前几天,一位同学在群里提出一个拿蛋的问题,原题如下: 有一筐鸡蛋, 1个1个拿,正好拿完 2个2个拿,正好拿完 3个3个拿,正好拿完 4个4个拿,剩下2个 5个5个拿,剩下4个 6个6个拿,正好拿完 7个7个拿,剩下5个 8个8个拿,剩下2个 9个9个拿,正好拿完 求:筐里一共有多少鸡蛋? 请使用脚本方式,计算鸡蛋总数! 个人感觉这个题目写的不严谨,因为至少我没看明白,这道题问的到底是"这个筐里最少有多少鸡蛋?"还是"筐里鸡蛋总数在某一范围之内(比如这个筐里最多能装10000

12道算法与编程面试题

12道Java算法与编程面试题 自己整理的面试题,希望可以帮到大家,需要更多资料的可以私信我哦,大家一起学习进步!  算法与编程 1.编写一个程序,将a.txt文件中的单词与b.txt文件中的单词交替合并到c.txt文件中,a.txt文件中的单词用回车符分隔,b.txt文件中用回车或空格进行分隔. 答: package cn.itcast; import java.io.File; import java.io.FileReader; import java.io.FileWriter; pub

12道Java算法与编程面试题

12道Java算法与编程面试题自己整理的面试题,希望可以帮到大家,需要更多资料的可以私信我哦,大家一起学习进步! 算法与编程1.编写一个程序,将a.txt文件中的单词与b.txt文件中的单词交替合并到c.txt文件中,a.txt文件中的单词用回车符分隔,b.txt文件中用回车或空格进行分隔.答:package cn.itcast; import java.io.File;import java.io.FileReader;import java.io.FileWriter; public cla

[0x01 用Python讲解数据结构与算法] 关于数据结构和算法还有编程

忍耐和坚持虽是痛苦的事情,但却能渐渐地为你带来好处. ——奥维德 一.学习目标 · 回顾在计算机科学.编程和问题解决过程中的基本知识: · 理解“抽象”在问题解决过程中的重要作用: · 理解并实现抽象数据结构: · 复习Python编程语言 二.写在前面 自第一台电子计算机使用线路和开关传达人类的指令以来,我们编程的思考方式有了很大的改变,在很多方面,计算机技术的发展为计算机科学家提供了众多的工具和平台去实现他们的想法.高性能理器,高速网络和大内存使得计算机研究者必须掌握在这样复杂的螺旋式通道中

poj 算法基础 编程题#1:UNIMODAL PALINDROMIC DECOMPOSITIONS

编程题#1:UNIMODAL PALINDROMIC DECOMPOSITIONS 来源: POJ(Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩.) 注意: 总时间限制: 1000ms 内存限制: 65536kB 描述 A sequence of positive integers is Palindromic if it reads the same forward and backward. For example: 23 11 15 1 37 37 1 1

POJ 算法基础 编程题#2: 滑雪

编程题#2: 滑雪 来源: POJ(Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩.) 注意: 总时间限制: 1000ms 内存限制: 65536kB 描述 Michael喜欢滑雪百这并不奇怪, 因为滑雪的确很刺激.可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你.Michael想知道载一个区域中最长的滑坡.区域由一个二维数组给出.数组的每个数字代表点的高度.下面是一个例子 1 2 3 4 5 16 17 18 19

最大子序列和算法分析&mdash;&mdash;好的算法对于编程是多么重要!!!

昨天晚上在宿舍看Mark Allen Weiss老爷子的<数据结构与算法分析Java语言描述>的这本书,看到第二章的时候举了个例子来讨论,就是关于最大子序列和的算法分析.一共提了四个算法,首先当你看见第一个算法的时候觉得这个算法不错,可以实现,再接着当你看到后面连着的三个例子的时候这才明白算法一步步的优化对于整个性能的提升,有时候我们不是想不出来好的算法,只是当第一种算法出来得时候我们的思维已经被局限化了,觉得是对的就以为是唯一解了,实感唏嘘! 早上来到实验室特地找了一些资料,贴在这里,以后多