算法

算法
–1,概述
算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用 系统的方法描述解决问题的策略机制。也就是说,能够对一定规范的输入,在有限时间内获得所要求的输 出。如果一个算法有缺陷,或不适合于某个问题,执行这个算法将不会解决这个问题。不同的算法可能用不同的时 间、空间或效率来完成同样的任务。一个算法的优劣可以用空间复杂度与时间复杂度来衡量。
–2,分类
算法可大致分为基本算法、数据结构的算法、数论与代数算法、计算几何的算法、图论的算法、动态规 划以 及数值分析、加密算法、排序算法、检索算法、随机化算法、并行算法,厄米变形模型,随机森林算法。
–3,排序算法
–概述
所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。 排序算法,就是如何使得记录按照要求排列的方法。排序算法在很多领域得到相当地重视,尤其是 在大量数据的处理方面。一个优秀的算法可以节省大量的资源。在各个领域中考虑到数据的各种限 制和规范,要得到一个符合实际的优秀算法,得经过大量的推理和分析。
–分类
? 插入排序
? 冒泡排序
? 选择排序
? 快速排序
? 归并排序
–冒泡排序
–冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。
–算法的核心:依次比较两个相邻的元素 + 交换位置
–使用场景:对一组无序数据进行排序 (升序/降序)–一般底层都是升序
–需求:给数组里的数据排序: [96,85,32,56,18]
–代码
package cn.tedu.util;

			import java.util.Arrays;
			import java.util.Random;
			//测试 冒泡排序
			public class ArrayUtils {
			    /**
			     * 这个方法用来产生指定长度的随机数组
			     * @param length 数组的长度
			     * @return 随机数组
			     */
			    public static int[] randomArr(int length){
			        //1,创建数组
			        int[] a = new int[length];
			        //2,遍历数组,并赋予随机数
			        for (int i = 0; i < a.length; i++) {
			            a[i] = new Random().nextInt(100);//产生100以内的随机数
			        }
			        //3,把产生的随机数组返回调用位置
			        return a ;
			    }
			    /**
			     * 这个方法用来给无序的 int[] 排序
			     * @param a  是int[]
			     */
			    public static void bubbleSort(int[] a){
			        //2,冒泡排序--升序
			        //-1 的原因是: 让5个数字,比4轮 -- 也就是让外循环执行4次
			        for (int i = 0; i < a.length-1 ; i++) {//外循环--控制轮数
			            //TODO 优化:因为每轮参与比较的数字变少了,变化的规律
			            // 就是第一轮比4次,第二轮比3次,第三轮比2次,第四轮比1次.
			            // 优化前:是每一轮都要比4次.
			//      for (int j = 0; j < a.length-1; j++) {//内循环--控制每轮要比几次--优化前:每轮比4次,浪费!!
			            //TODO - i 优化后,应该让比较次数依次减少,规律是
			            // 第一轮-0,第二轮-1,第三轮-2,第四轮-3. 找一个变量的变化规律是  0 1 2 3
			            for (int j = 0; j < a.length-1 - i ; j++) {//优化后,每轮的次数都在减少!!
			                //1,相邻元素比较 a[j]  a[j+1]
			                if(a[j] > a[j+1]){//升序,前面的大就换位置
			                    //2,交换位置
			                    int c = a[j] ;
			                    a[j] = a[j+1] ;
			                    a[j+1] = c ;
			                }
			            }
			        }
			        System.out.println( Arrays.toString(a) );
			    }
			}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值