咦咦咦,各位小可爱,我是你们的好伙伴——bug菌,今天又来给大家普及Java SE相关知识点了,别躲起来啊,听我讲干货还不快点赞,赞多了我就有动力讲得更嗨啦!所以呀,养成先点赞后阅读的好习惯,别被干货淹没了哦~
🏆本文收录于 **[「滚雪球学Java」 ](https://blog.csdn.net/weixin_43970743/category_9600553.html)专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅**!持续更新中,up!up!up!!
环境说明:Windows 10 + IntelliJ IDEA 2021.3.2 + Jdk 1.8
数组是最常用的数据结构之一,在各种编程语言中都有广泛应用。在Java中,数组可以直接使用,也可以通过集合框架中的List、Set等数据结构来实现。但是,在实际开发中,我们常常需要对数组进行一些操作,比如排序、查找、过滤等。这些操作需要使用一些数组算法。
本文将介绍一些常用的数组算法,包括排序、查找、过滤等。我们将通过实际案例来展示这些算法的应用。我们将使用Java编程语言来实现这些算法,并且提供源代码、方法介绍、测试用例等详细信息。希望本文能够帮助您更好地理解数组算法。
本文将介绍以下几种数组算法:
我们将通过实际案例来展示这些算法的应用,并提供源代码、方法介绍、测试用例等详细信息。
冒泡排序是一种简单的排序算法,它的基本思想是比较相邻的元素。如果第一个比第二个大,就交换它们两个。对第一轮排序后,在剩下的元素中再进行第二轮排序,以此类推。这样每一轮排序结束后,都会将最大的元素排到最后面。
以下是冒泡排序算法的Java实现:
public static void bubbleSort(int[] arr) {
int n = arr.length;
for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < n - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
上面的代码中,我们使用了两个嵌套循环来实现冒泡排序。外层循环控制排序轮数,内层循环控制比较的次数。在内层循环中,我们比较相邻的元素,如果前面的元素比后面的大,就交换它们两个。
快速排序是一种常用的排序算法,它的基本思想是挖坑填数。具体来说,我们先从数列中取出一个数作为基准数,然后将比它小的数放在左边,比它大的数放在右边。接着,我们再对左右两边的子数列进行递归处理,直到整个序列有序为止。
以下是快速排序算法的Java实现:
public static void quickSort(int[] arr, int left, int right) {
if (left < right) {
int i = left;
int j = right;
int pivot = arr[left];
while (i < j) {
while (i < j && arr[j] >= pivot) {
j--;
}
if (i < j) {
arr[i] = arr[j];
i++;
}
while (i < j && arr[i] < pivot) {
i++;
}
if (i < j) {
arr[j] = arr[i];
j--;
}
}
arr[i] = pivot;
quickSort(arr, left, i - 1);
quickSort(arr, i + 1, right);
}
}
上面的代码中,我们使用了递归来实现快速排序。在每一轮排序中,我们首先选取一个基准数,然后从序列的两端开始比较,将比基准数小的数放在左边,比基准数大的数放在右边。在比较过程中,我们使用两个指针i和j来记录左右两边位置,最后将基准数插入到i的位置。
二分查找是一种常用的查找算法,它的基本思想是将查找区间不断缩小,直到找到目标元素或者查找区间为空。具体来说,我们先将查找区间定为整个序列,然后取中间位置的元素与目标元素比较。如果中间位置的元素等于目标元素,则直接返回该位置。如果中间位置的元素小于目标元素,则查找区间缩小到右半部分。否则查找区间缩小到左半部分。重复上述过程,直到找到目标元素或者查找区间为空。
以下是二分查找算法的Java实现:
public static int binarySearch(int[] arr, int target) {
int left = 0;
int right = arr.length - 1;
while (left <= right) {
int mid = (left + right) / 2;
if (arr[mid] == target) {
return mid;
} else if (arr[mid] < target) {
left = mid + 1;
} else {
right = mid - 1;
}
}
return -1;
}
上面的代码中,我们使用了循环来实现二分查找。在每一轮查找中,我们首先计算中间位置mid,然后将中间位置的元素与目标元素比较。如果相等,则直接返回中间位置。如果目标元素小于中间元素,则将查找区间缩小到左半部分。如果目标元素大于中间元素,则将查找区间缩小到右半部分。重复上述过程,直到找到目标元素或者查找区间为空。
过滤算法是一种常用的数组处理算法,它的基本思想是筛选符合要求的元素,并将它们存放在一个新的数组中。具体来说,我们首先遍历原数组中的每一个元素,然后判断它是否符合某个条件。如果符合条件,则将它存放在新数组中。最后返回新数组。
以下是过滤算法的Java实现:
public static int[] filter(int[] arr, Filter filter) {
int[] result = new int[arr.length];
int count = 0;
for (int i = 0; i < arr.length; i++) {
if (filter.filter(arr[i])) {
result[count++] = arr[i];
}
}
return Arrays.copyOf(result, count);
}
public interface Filter {
boolean filter(int value);
}
上面的代码中,我们为过滤算法定义了一个Filter接口,用于表示过滤条件。在filter方法中,我们首先创建一个新数组result,并定义一个count变量计数符合条件的元素个数。然后遍历原数组中的每一个元素,如果符合条件,则将它存放在新数组中,并将count加1。最后,我们使用Arrays.copyOf方法将新数组缩小到count大小,并返回新数组。
冒泡排序是一种简单直观的排序方法,通过重复遍历待排序的数组,并比较每对相邻元素的大小,如果它们的顺序错误就把它们交换过来。遍历和交换过程会重复执行,直到数组被排序完成。
快速排序是一种分而治之的排序算法,通过选取一个“基准”元素,将数组分为两个子数组,一个包含所有小于基准的元素,另一个包含所有大于基准的元素。然后递归地在两个子数组上重复这个过程。
二分查找是一种在有序数组中查找特定元素的搜索算法。通过比较数组中间的元素与目标值,可以决定是继续在左半部分还是右半部分进行搜索,从而逐步缩小搜索范围。
过滤算法用于从数组中筛选出满足特定条件的元素。通过遍历数组,并对每个元素应用过滤条件,将符合条件的元素存储到新数组中。
本文提供的Java实现展示了每种算法的核心逻辑,并通过实际代码示例,展示了如何在Java中编写这些算法。这些示例不仅包括算法的实现,还包括了如何调用这些算法以及如何验证它们的正确性。
测试用例是验证算法正确性的关键部分。本文提供的测试用例覆盖了各种算法的基本功能,通过实际运行测试用例,可以确保算法按预期工作,并处理各种边界情况。
数组算法是计算机科学中的基础知识,对于任何软件开发者来说都是必须掌握的技能。本文介绍的算法各有特点,适用于不同的场景和需求。冒泡排序以其简单性在教学中广泛使用,快速排序以其效率在实际应用中被广泛采用,二分查找则利用了数据有序性的特点来提高查找效率,而过滤算法则是一种灵活的数据处理手段。希望读者通过本文能够加深对这些算法的理解和应用能力。
public class BubbleSort {
public static void bubbleSort(int[] arr) {
int len = arr.length;
for (int i = 0; i < len - 1; i++) {
for (int j = 0; j < len - 1 - i; j++) {
if (arr[j] > arr[j + 1]) {
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
public static void main(String[] args) {
int[] arr = {5, 3, 8, 6, 4};
bubbleSort(arr);
for (int i : arr) {
System.out.print(i + " ");
}
}
}
输出结果:
3 4 5 6 8
public class QuickSort {
public static void quickSort(int[] arr, int left, int right) {
if (left < right) {
int i = left;
int j = right;
int pivot = arr[left];
while (i < j) {
while (i < j && arr[j] >= pivot) {
j--;
}
if (i < j) {
arr[i++] = arr[j];
}
while (i < j && arr[i] <= pivot) {
i++;
}
if (i < j) {
arr[j--] = arr[i];
}
}
arr[i] = pivot;
quickSort(arr, left, i - 1);
quickSort(arr, i + 1, right);
}
}
public static void main(String[] args) {
int[] arr = {5, 3, 8, 6, 4};
quickSort(arr, 0, arr.length - 1);
for (int i : arr) {
System.out.print(i + " ");
}
}
}
输出结果:
3 4 5 6 8
public class BinarySearch {
public static int binarySearch(int[] arr, int target) {
int left = 0;
int right = arr.length - 1;
while (left <= right) {
int mid = left + (right - left) / 2;
if (arr[mid] == target) {
return mid;
} else if (arr[mid] > target) {
right = mid - 1;
} else {
left = mid + 1;
}
}
return -1;
}
public static void main(String[] args) {
int[] arr = {1, 2, 3, 4, 5};
int target = 4;
int index = binarySearch(arr, target);
System.out.println(index);
}
}
输出结果:
3
import java.util.ArrayList;
import java.util.List;
public class FilterAlgorithm {
public static List<Integer> filter(List<Integer> list) {
List<Integer> result = new ArrayList<>();
for (int i : list) {
if (i % 2 == 0) {
result.add(i);
}
}
return result;
}
public static void main(String[] args) {
List<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);
list.add(4);
list.add(5);
List<Integer> result = filter(list);
for (int i : result) {
System.out.print(i + " ");
}
}
}
输出结果:
2 4
本文详细介绍了几种常用的数组算法,包括冒泡排序、快速排序、二分查找和过滤算法,并提供了Java语言的实现示例以及测试用例。这些算法在数组处理中扮演着重要角色,无论是在学术学习还是在工业应用中都非常有用。
无论你是计算机专业的学生,还是对编程有兴趣的小伙伴,都建议直接毫无顾忌的学习此专栏「滚雪球学Java」,bug菌郑重承诺,凡是学习此专栏的同学,均能获取到所需的知识和技能,全网最快速入门Java编程,就像滚雪球一样,越滚越大,指数级提升。
码字不易,如果这篇文章对你有所帮助,帮忙给bugj菌来个一键三连(关注、点赞、收藏) ,您的支持就是我坚持写作分享知识点传播技术的最大动力。 同时也推荐大家关注我的硬核公众号:「猿圈奇妙屋」 ;以第一手学习bug菌的首发干货,不仅能学习更多技术硬货,还可白嫖最新BAT大厂面试真题、4000G Pdf技术书籍、万份简历/PPT模板、技术文章Markdown文档等海量资料,你想要的我都有!
我是bug菌,CSDN | 掘金 | infoQ | 51CTO 等社区博客专家,历届博客之星Top30,掘金年度人气作者Top40,51CTO年度博主Top12,掘金等平台签约作者,华为云 | 阿里云| 腾讯云等社区优质创作者,全网粉丝合计30w+ ;硬核微信公众号「猿圈奇妙屋」,欢迎你的加入!免费白嫖最新BAT互联网公司面试题、4000G pdf电子书籍、简历模板等海量资料。
--End
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。