Java基础——算法、栈、队列的介绍

本文深入浅出地讲解了如何将数学公式转化为高效代码,包括计算0-99和的两种方法,以及排序、选择、查找算法的原理,如冒泡排序、二分查找的应用。通过实例演示栈与队列操作,展示了数据结构在算法中的关键作用。

算法

简介

将数学公式转换为代码,就可以称为算法

举例:
	计算0~99之间数的和
	方法一:
	int sum = 0;
	for(int i= 0; i < 100; i++){
		sum = sum + i;
	}
	方法二:
	int sum = n*(n+1)/2;
	
算法好不好的判断方式:
	看代码的执行效率
算法的作用:
	加快代码的执行效率

常用算法

排序

冒泡
原理:相邻比较
选择
原理:
	1、确定要放置数据的位置
	2、寻找最值的位置,使最值所在的位置与确定的位置进行替换
	3、注意已经排序好的数据

查找

普通查找
原理:逐个比较
二分查找
别名:折半查找法

要求:数组或集合必须是有序的,此处的有序指数组或集合中的数据是从小到大或从大到小整齐排列的
原理:
	定义开始位置与结束位置
	获取开始位置与结束位置的中间值
	判断中间值是否等于查找的数据,如果等于直接输出的结果
	如果中间值小于查找的数据,并且数据或集合是从小到大排列,那么移动开始位置到中间值下标+1
	反之如果数组或集合是从大到小排列,那么移动结束位置到中间值下标-1
	循环移动开始位置或结束位置,不断计算其中间位置
练习:一个从大到小排列的集合,使用二分查找法寻找10这个数是否在集合中存在
public class Test01 {
	public static void main(String[] args) {
		int[] nums = {10,19,18,98,75,12,21,6};
		int index = getIndex(nums, 10);
		System.out.println(index);
	}
	public static int getIndex(int[] nums,int x) {
		int start = 0;
		int end = nums.length - 1;
		while (start <= end) {
			// 中间位置 = (开始位置 + 结束位置 ) / 2
			int center  = (start + end)/2;
			if (nums[center] == x) {
				// 如果找到了数字则直接返回
				return center;
			}else if (nums[center] < x) {
				//如果被查询的数字大于中间位置的值,则表示该数在数组的后半区域,则将开始位置设置为中间位置+1
				start = center + 1;
			}else {
				//如果被查询的数字大于中间位置的值,则表示该数在数组的前半区域,则将结束位置设置为中间位置-1
				end = center - 1;
			}
			
		}
		return -1;
	}
}

理解栈与队列

先进后出

import java.util.ArrayList;
//栈
public class Test031 {
	public static void main(String[] args) {
		ArrayList<String> list = new ArrayList<String>();
		list.add("豆三岁");
		list.add("赵融融");
		list.add("许帅哥");
		list.add("王可牛");
		for(int i = list.size()-1; i >= 0; i--) {
			String num = list.remove(i);
			System.out.println(num);
		}
	}
}

运行结果:
在这里插入图片描述

队列
先进先出

import java.util.ArrayList;
//队列
public class Test032 {
	public static void main(String[] args) {
		ArrayList<String> list = new ArrayList<String>();
		list.add("豆三岁");
		list.add("赵融融");
		list.add("许二球");
		list.add("王可牛");
		while(list.size() > 0) {
			String num = list.remove(0);
			System.out.println(num);
		}
	}
}

运行结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值