`

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 核心类的示例、 部分工具类、 数据结构和算法.zip

    算法分类:排序算法(如冒泡排序、快速排序、归并排序),查找算法(如顺序查找、二分查找、哈希查找),图论算法(如Dijkstra最短路径算法、Floyd-Warshall算法、Prim最小生成树算法),动态规划,贪心算法,回溯法...

    Java学习总结,目前包括数据结构,算法,设计模式,反射,线程,集合和内部类..zip

    算法分类:排序算法(如冒泡排序、快速排序、归并排序),查找算法(如顺序查找、二分查找、哈希查找),图论算法(如Dijkstra最短路径算法、Floyd-Warshall算法、Prim最小生成树算法),动态规划,贪心算法,回溯法...

    《Java和Android开发实战详解》第6到10章源代码-by 南邮-陈杨

    6.6.4 二分查找法 116 习题 117 第7章 类与对象 119 7.1 面向对象的应用程序开发 119 7.1.1 传统的应用程序开发 119 7.1.2 面向对象的应用程序开发 120 7.2 面向对象基础 120 7.2.1 对象基础 121 ...

    JAVA基础课程讲义

    冒泡排序 111 二分法查找 112 命令行参数的问题 113 增强for循环 114 思考作业 114 上机作业 115 第六章 常用类的使用 117 基本数据类型的包装类 117 包装类基本知识 117 包装类的用途 118 自动装箱和拆箱?...

    java 面试题 总结

    Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。 10、&和&&的区别。 &是位运算符,表示按位与运算,&&是逻辑运算符,表示逻辑与(and)。 11、HashMap...

    java范例开发大全源代码

     实例74 冒泡排序法 102  实例75 数组递增排序 103  实例76 部分数组递增排序 103  实例77 选择排序法 104  实例78 快速排序法 106  第6章 字符串(教学视频:138分钟) 108  6.1 字符串类String...

    java范例开发大全

    实例213 二分查找法的实现方法 377 实例214 模拟操作系统的进程调度 379 实例215 利用栈将字符串逆序输出 381 实例216 动态的数组链表 382 实例217 你能猜出鱼是谁的宠物吗? 387 实例218 使用Collections类对List的...

    Java范例开发大全 (源程序)

     实例213 二分查找法的实现方法 377  实例214 模拟操作系统的进程调度 379  实例215 利用栈将字符串逆序输出 381  实例216 动态的数组链表 382  实例217 你能猜出鱼是谁的宠物吗? 387  实例218 使用...

    java范例开发大全(pdf&源码)

    实例213 二分查找法的实现方法 377 实例214 模拟操作系统的进程调度 379 实例215 利用栈将字符串逆序输出 381 实例216 动态的数组链表 382 实例217 你能猜出鱼是谁的宠物吗? 387 实例218 使用Collections类对List的...

    超级有影响力霸气的Java面试题大全文档

    Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。 13、&和&&的区别。 &是位运算符,表示按位与运算,&&是逻辑运算符,表示逻辑与(and)。 14、...

    Java范例开发大全(全书源程序)

    实例213 二分查找法的实现方法 377 实例214 模拟操作系统的进程调度 379 实例215 利用栈将字符串逆序输出 381 实例216 动态的数组链表 382 实例217 你能猜出鱼是谁的宠物吗? 387 实例218 使用Collections类对...

    Java开发实战1200例(第1卷).(清华出版.李钟尉.陈丹丹).part3

    实例051 使用冒泡排序法 62 实例052 使用快速排序法 64 实例053 使用直接插入法 65 实例054 使用sort方法对数组进行排序 67 实例055 反转数组中元素的顺序 68 3.4 常用集合的使用 69 实例056 用动态数组保存学生姓名...

    net学习笔记及其他代码应用

    8.请编程实现一个冒泡排序算法? 答: int [] array = new int ; int temp = 0 ; for (int i = 0 ; i ; i++) { for (int j = i + 1 ; j ; j++) { if (array[j] ) { temp = array ; array = array[j] ; ...

Global site tag (gtag.js) - Google Analytics