以下各种排序都是使用数组实现的。
1,冒泡排序(BubbleSort)的基本概念是:依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。至此第一趟结束,将最大的数放到了最后。在第二趟:仍从第一对数开始比较(因为可能由于第2个数和第3个数的交换,使得第1个数不再小于第2个数),将小数放前,大数放后,一直比较到倒数第二个数(倒数第一的位置上已经是最大的),第二趟结束,在倒数第二的位置上得到一个新的最大数(其实在整个数列中是第二大的数)。如此下去,重复以上过程,直至最终完成排序。
package com.test.array;
public class BubbleSortTest {
public static void main(String[] args) {
int[] array = {7,2,9,4,5};
bubbleSort(array);
}
public static void bubbleSort(int[] array){
for (int i = 0; i < array.length; i++) {
for (int j = 0; j < array.length-i-1; j++) {
if(array[j] > array[j+1]){
int tmp = array[j];
array[j] = array[j+1];
array[j+1] = tmp;
}
}
System.out.println("第"+i+1+"趟排序结果");
for (int k = 0; k < array.length; k++) {
System.out.print(array[k]+" ");
}
System.out.println();
}
}
}
最后输出结果为
第01趟排序结果
2 7 4 5 9
第11趟排序结果
2 4 5 7 9
第21趟排序结果
2 4 5 7 9
第31趟排序结果
2 4 5 7 9
第41趟排序结果
2 4 5 7 9
2,二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列表。首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。
package com.test.array;
public class ArraySearchTest {
public static void main(String[] args) {
int[] array = {1,3,6,8,11,18};
int value = 11;
int index = binarySearch(array, value);
System.out.println(index);
}
public static int binarySearch(int[] array, int value) {
int low = 0;
int high = array.length - 1;
int middle;
while (low <= high) {
middle = (low + high) / 2;
if (array[middle] == value) {
return middle;
}
if (value < array[middle]) {
high = middle - 1;
}
if (value > array[middle]) {
low = middle + 1;
}
}
return -1;
}
}
3,生成随机数排序测试:
随机生成50个数字(整数),每个数字的范围是【10,50】,统计每个数字出现的次数以及出现次数最多的数字与它的个数,最后将每个数字及其出现次数打印出来。如果某个出现的次数是0,则不打印它。打印时按照数字的升序排列。
package com.test.array;
import java.util.Random;
public class RandomTest {
public static void main(String[] args) {
Random random = new Random();
int[] count = new int[41]; //【10,50】有41个数字
//生成50个从10到50的随机数
for (int i = 0; i < 50; i++) {
//nextInt返回的是大于等于0,小于界限值的整数值,例如下面的nextInt(41)将返回0到40的整数
int number = random.nextInt(41)+10;
count[number - 10]++; //记录出现的次数
}
int maxTimes = 0;
int maxTimesValue = 0;
//打印结果
for (int i = 0; i < count.length; i++) {
if (count[i] == 0) {
continue;
}
System.out.println((10+i)+"出现次数:"+count[i]);
if(maxTimes < count[i]){
maxTimes = count[i];
maxTimesValue = i +10;
}
}
System.out.println("最大次数是:"+maxTimes+"次,数字是:"+maxTimesValue);
}
}
分享到:
相关推荐
8. 查找算法:实验中未涉及到查找算法,但可以使用线性查找或二分查找算法来实现查找操作。 9. Java 集合框架:实验中使用了 Vector 类来存储用户输入的整数数据, Vector 是 Java 集合框架的一部分,可以用来存储...
5. **数据结构与算法**:这部分内容包括链表、树、图、栈、队列、堆、哈希表等经典数据结构,以及排序算法(如冒泡、选择、插入、快速、归并排序)、查找算法(如二分查找、哈希查找)等。熟悉这些基础知识有助于...
* 不同类型的内部排序算法:冒泡排序、选择排序、插入排序、希尔排序、快速排序、归并排序。 * 各种内部排序算法的时间复杂度和稳定性分析。 第八章:查找算法 * 查找算法的定义:查找算法是一种从数据结构中查找...
1. **基础算法**:这部分内容可能包括经典的排序算法(如冒泡排序、插入排序、快速排序、归并排序、堆排序等)、搜索算法(如二分查找、广度优先搜索、深度优先搜索等)、图论算法(如最短路径算法Dijkstra、拓扑...
二分查找的基本思路是每次排除掉一半的搜索空间,直到找到目标元素或搜索空间为空。 ### 示例代码片段 下面给出一个简单的示例,演示如何使用`ArrayList`和`HashSet`: ```java import java.util.ArrayList; ...
基础算法是所有编程和软件开发的基石,它们包括排序(如冒泡排序、快速排序、归并排序)、查找(如二分查找、哈希查找)、图算法(如深度优先搜索、广度优先搜索)以及动态规划等。这些算法在日常开发中无处不在,...
- 查找算法:顺序查找、二分查找、哈希查找,其中二分查找在有序数组中非常高效。 - 动态规划:用于解决最优化问题,如背包问题、最长公共子序列等。 - 分治策略:将大问题分解为小问题求解,如快速排序和归并...
- 二分查找:适用于已排序的数组,每次比较中间元素,根据比较结果缩小搜索范围,效率高。 7. `java.util.Arrays`类: - 提供了数组排序方法`Arrays.sort()`,适用于基本类型数组。 - `Arrays.binarySearch()`...
同时,排序算法(如冒泡、插入、选择、快速排序)和查找算法(如二分查找)也是常考内容。 7. **框架**:面试中可能会考察Spring、Hibernate、MyBatis等流行的Java框架。Spring作为依赖注入容器,管理对象之间的...
- **查找**:顺序查找、二分查找、哈希查找。 - **图算法**:深度优先搜索(DFS)、广度优先搜索(BFS)、最小生成树(Prim或Kruskal)、最短路径(Dijkstra或Floyd-Warshall)。 - **动态规划**:解决复杂问题,...
8. **算法**:书中会介绍排序(冒泡、选择、插入、快速、归并排序等)和搜索(线性、二分查找)等基本算法,同时可能涉及贪心、动态规划等高级算法思想。 9. **字符串处理**:Java中的String类及其操作,如拼接、...
- **查找算法**:线性查找、二分查找、哈希查找,其中二分查找和哈希查找在有序和特定数据结构中表现出色。 - **递归与分治**:如斐波那契数列、快速排序、归并排序,递归是解决问题的一种强大方法,分治策略则常...
- **查找算法**:线性查找、二分查找、哈希查找等。 - **递归算法**:解决自相似问题的有效方法,如斐波那契数列、汉诺塔等。 - **回溯法**:在解决问题时尝试所有可能的路径,遇到无效条件则回退,常用于求解...
在Java中,常见的数组操作包括排序(如冒泡排序和选择排序)和查找(如二分查找)。 数组类`Array`提供了对数组的一些便利方法,如`sort()`用于排序,`binarySearch()`进行二分查找,以及判断数组内容是否相等的`...
理解常见的数据结构(如栈、队列、链表、树、图)及其操作,掌握排序算法(如冒泡、插入、选择、快速、归并排序)和查找算法(如二分查找、哈希查找)。计算机基础包括操作系统原理、网络协议、内存管理、CPU调度等...
2. **查找算法**:顺序查找、二分查找、哈希查找。 3. **动态规划**:背包问题、最长公共子序列、最小编辑距离等。 4. **贪心算法**:解决最优解问题,如活动选择问题、霍夫曼编码。 5. **回溯法与分支限界法**:...
- 冒泡排序:冒泡排序在最坏的情况下比较次数为\(n(n-1)/2\)次。其中,\(n\)为待排序数组的长度。 - 快速排序:快速排序同样是在最坏情况下比较次数为\(n(n-1)/2\)次。快速排序通过选取基准元素并进行分区操作来...
2. 二分查找:适用于已排序的数组,通过不断将目标值与中间元素比较,缩小查找范围,每次查找都将搜索区间减半。二分查找的平均时间复杂度为O(log n),效率较高。 3. 插值查找:在有序数组中,根据目标值与数组首尾...
2. 排序:冒泡排序、选择排序、插入排序、快速排序、归并排序等,Java的Collections类提供了对列表的排序功能。 3. 栈的应用:深度优先搜索(DFS)、表达式求值等。 4. 队列的应用:广度优先搜索(BFS)。 5. 树的...