`

JAVA集合类(2):冒泡排序、二分查找

 
阅读更多

以下各种排序都是使用数组实现的。

 

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);
	}
}

 

 

 

分享到:
评论

相关推荐

    java实验8 排序与查找.doc

    8. 查找算法:实验中未涉及到查找算法,但可以使用线性查找或二分查找算法来实现查找操作。 9. Java 集合框架:实验中使用了 Vector 类来存储用户输入的整数数据, Vector 是 Java 集合框架的一部分,可以用来存储...

    Java知识点总结,面试必备,java基础、java集合、JVM、Java并发

    5. **数据结构与算法**:这部分内容包括链表、树、图、栈、队列、堆、哈希表等经典数据结构,以及排序算法(如冒泡、选择、插入、快速、归并排序)、查找算法(如二分查找、哈希查找)等。熟悉这些基础知识有助于...

    数据结构JAVA语言描述习题答案刘小晶等主编pdf总复习PPT学习教案.pptx

    * 不同类型的内部排序算法:冒泡排序、选择排序、插入排序、希尔排序、快速排序、归并排序。 * 各种内部排序算法的时间复杂度和稳定性分析。 第八章:查找算法 * 查找算法的定义:查找算法是一种从数据结构中查找...

    多年积累的基础算法等,使用java实现,包括:基础算法,大数据算法,JVM特性等示例程序集合,适合面试.zip

    1. **基础算法**:这部分内容可能包括经典的排序算法(如冒泡排序、插入排序、快速排序、归并排序、堆排序等)、搜索算法(如二分查找、广度优先搜索、深度优先搜索等)、图论算法(如最短路径算法Dijkstra、拓扑...

    Java笔记-集合与算法

    二分查找的基本思路是每次排除掉一半的搜索空间,直到找到目标元素或搜索空间为空。 ### 示例代码片段 下面给出一个简单的示例,演示如何使用`ArrayList`和`HashSet`: ```java import java.util.ArrayList; ...

    多年积累的基础算法等,使用java实现,包括:基础算法,大数据算法,JVM特性等示例程序集合

    基础算法是所有编程和软件开发的基石,它们包括排序(如冒泡排序、快速排序、归并排序)、查找(如二分查找、哈希查找)、图算法(如深度优先搜索、广度优先搜索)以及动态规划等。这些算法在日常开发中无处不在,...

    Java数据结构和算法中文第二版

    - 查找算法:顺序查找、二分查找、哈希查找,其中二分查找在有序数组中非常高效。 - 动态规划:用于解决最优化问题,如背包问题、最长公共子序列等。 - 分治策略:将大问题分解为小问题求解,如快速排序和归并...

    Java程序设计:5 数组与字符串.part3.ppt

    - 二分查找:适用于已排序的数组,每次比较中间元素,根据比较结果缩小搜索范围,效率高。 7. `java.util.Arrays`类: - 提供了数组排序方法`Arrays.sort()`,适用于基本类型数组。 - `Arrays.binarySearch()`...

    java笔试题大集合及答案

    同时,排序算法(如冒泡、插入、选择、快速排序)和查找算法(如二分查找)也是常考内容。 7. **框架**:面试中可能会考察Spring、Hibernate、MyBatis等流行的Java框架。Spring作为依赖注入容器,管理对象之间的...

    Data Structures And Algorithms in Java.pdf

    - **查找**:顺序查找、二分查找、哈希查找。 - **图算法**:深度优先搜索(DFS)、广度优先搜索(BFS)、最小生成树(Prim或Kruskal)、最短路径(Dijkstra或Floyd-Warshall)。 - **动态规划**:解决复杂问题,...

    Java语言程序设计与数据结构(第11版)_java_

    8. **算法**:书中会介绍排序(冒泡、选择、插入、快速、归并排序等)和搜索(线性、二分查找)等基本算法,同时可能涉及贪心、动态规划等高级算法思想。 9. **字符串处理**:Java中的String类及其操作,如拼接、...

    数据结构与算法分析(Java版)

    - **查找算法**:线性查找、二分查找、哈希查找,其中二分查找和哈希查找在有序和特定数据结构中表现出色。 - **递归与分治**:如斐波那契数列、快速排序、归并排序,递归是解决问题的一种强大方法,分治策略则常...

    Java数据结构和算法 (第二版).rar

    - **查找算法**:线性查找、二分查找、哈希查找等。 - **递归算法**:解决自相似问题的有效方法,如斐波那契数列、汉诺塔等。 - **回溯法**:在解决问题时尝试所有可能的路径,遇到无效条件则回退,常用于求解...

    Java程序设计课件:5 数组与字符串_part2.ppt

    在Java中,常见的数组操作包括排序(如冒泡排序和选择排序)和查找(如二分查找)。 数组类`Array`提供了对数组的一些便利方法,如`sort()`用于排序,`binarySearch()`进行二分查找,以及判断数组内容是否相等的`...

    java程序员必备的面试宝典秘籍.pdf

    理解常见的数据结构(如栈、队列、链表、树、图)及其操作,掌握排序算法(如冒泡、插入、选择、快速、归并排序)和查找算法(如二分查找、哈希查找)。计算机基础包括操作系统原理、网络协议、内存管理、CPU调度等...

    Java基础,Java进阶,Java数据结构,十大算法

    2. **查找算法**:顺序查找、二分查找、哈希查找。 3. **动态规划**:背包问题、最长公共子序列、最小编辑距离等。 4. **贪心算法**:解决最优解问题,如活动选择问题、霍夫曼编码。 5. **回溯法与分支限界法**:...

    历年计算机二级java笔试试题及答案

    - 冒泡排序:冒泡排序在最坏的情况下比较次数为\(n(n-1)/2\)次。其中,\(n\)为待排序数组的长度。 - 快速排序:快速排序同样是在最坏情况下比较次数为\(n(n-1)/2\)次。快速排序通过选取基准元素并进行分区操作来...

    Java程序设计-常见算法

    2. 二分查找:适用于已排序的数组,通过不断将目标值与中间元素比较,缩小查找范围,每次查找都将搜索区间减半。二分查找的平均时间复杂度为O(log n),效率较高。 3. 插值查找:在有序数组中,根据目标值与数组首尾...

    JAVA数据结构实验报告

    2. 排序:冒泡排序、选择排序、插入排序、快速排序、归并排序等,Java的Collections类提供了对列表的排序功能。 3. 栈的应用:深度优先搜索(DFS)、表达式求值等。 4. 队列的应用:广度优先搜索(BFS)。 5. 树的...

Global site tag (gtag.js) - Google Analytics