本次我以桶排序为例子,什么桶排序?我们可以设想有10个水桶,每个水桶的可以装一部分水。
水量不能大,因为超出的装不了。同理,水桶也不能少,少了水没桶可以装。
以下是桶排序代码实现:
package Bucket_Sort_Demo;
import java.util.ArrayList;
import java.util.List;
/** 桶排序的过程注意,桶的整体大小设置和数量限制
* @Author:Allen
* @Date:5/20/2021 3:46 PM
*/
public class Bucket_Sort_Dmo5 {
public static void main(String[] args) {
int [] a = {1,5,9,11,15,18,21,22,28,32,31,38,42,46,49};//此处我们的数字不要超过50
List[] buckets = new ArrayList[5]; //我们一个桶内装的数字个数为5个
for(int i = 0; i < buckets.length; i++ ){ //逐个开辟桶长度个空间
buckets[i]=new ArrayList<Integer>();
}
for (int j = 0 ; j < a.length ;j++ ){
int index = a[j]/10; //分为10个桶
buckets[index].add(a[j]); //为list类型的桶增加元素,下标是n多少就在第n个桶内添加元素
}
for (int i = 0 ; i < buckets.length;i++){
buckets[i].sort(null); // 为每个桶进行排序
for (int j = 0 ; j<buckets[i].size(); j++){ //提取每个元素,每个桶长度的个数
System.out.print(buckets[i].get(j)+" "); //逐个打印
}
}
}
}
1.为什么需要学习算法?(个人理解,不代表正统理解)
算法是被人设计好的解决方案。每种算法是具体情景下的产物,解决相应的实际问题。比如协同过滤,电商平台可以根据用户的行为,进行物品推荐。算法工程师通过各类参数,模型的训练,找到一个更优的方案。对于算法,我们一般人需要会识别也能用得上。比如说,抖音里面搜自己感兴趣的球星,一排相关的视频推荐。算法工程师有门槛,但是识别自己是否被算法了,有助于脱离自己活在他人的算法。
2.什么是算法?
术语不罗列,简单说就是玩一个游戏,和你的战友(Computer)在规定的时间和空间里,获得游戏胜利。你自己设计规则,达到终点。
3.怎么学习算法?
逻辑能力训练,有什么用?买菜算账都能和卖菜大妈一样快(也不一定,人家是专业的)。玩笑话之后,主要是对编程基本功的训练,任何行业都有基本功,好的逻辑思维能力能让你更出色罗列项目的关键和细节。
我个人的训练方式:先查看基本原理,再罗列实现代码的关键步骤,最后用实例进行推导。第一轮,尝试写代码的过程中,会发现有不少未注意到的细节,可以先自行思考,再和Demo进行比对,写下要点。自己尝试捋代码逻辑。第二轮,书写的时候,思考哪些细节上可能出现的问题,与源代码比较。第三轮,一般可以健步如飞地顺下来书写。
以下是我码代码的过程:
总结:个人认为我们总想一遍过,写得流畅,往往很难学下去。多尝试,再不济5,6,7遍,总会更加熟练。一起加油,欢迎在评论区分享你的打怪升级心得。