算法
–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) );
}
}