Java.数组算法
发布日期:2021-05-07 02:46:22 浏览次数:20 分类:原创文章

本文共 2718 字,大约阅读时间需要 9 分钟。

Java.数组算法

一、冒泡排序算法:

  • 3 1 6 2 5
  • 经过算法后:1 2 3 5 6
  • 第一次:
  • 1 3 6 2 5
  • 1 3 6 2 5
  • 1 3 2 6 5
  • 1 3 2 5 6
  • 第二次
  • 1 3 2 5
  • 1 2 3 5
  • 1 2 3 5
  • 第三次
  • 1 3 2
  • 1 2 3
  • 第四次
  • 1 2
    冒泡排序算法就是通过相邻的两个数的比较大小后,依次转换位置,首先确定出最大的数。从后往前依次得出。
package 数组算法;public class bubbleSort {   	/**	 * @param args	 */	public static void main(String[] args) {   		// TODO Auto-generated method stub	    		//创建数组		int[] a = new int[]{   3,1,6,2,5};				//开始冒泡排序		//外层控制循环排序次数		for(int i = a.length-1;i>0;i--){   			//内层循环控制每次排序			for(int j = 0; j<i; j++){   				if(a[j]>a[j+1]){   					int temp;					temp = a[j];					a[j] = a[j+1];					a[j+1] = temp;				}			}			}				//遍历数组		for(int i = 0;i<a.length;i++){   			System.out.print(a[i]+" ");		}	}}结果:1 2 3 5 6 

二、选择排序算法:

选择排序即为从数组中选出最小的数与第一个位置的数进行交换。从前往后依次得出。(与冒泡排序相反)

package 数组算法;public class selectSort {   	public static void main(String[] args) {   		// 创建数组		int[] a = new int[] {    3, 1, 6, 2, 5 };		// 选择排序		for (int i = 0; i < a.length - 1; i++) {   			// 假设第一个元素最小			int min = i;			for (int j = i + 1; j < a.length; j++) {   				if (a[min] > a[j])					min = j;			}			//交换位置			if (min != i) {   				int temp;				temp = a[i];				a[i] = a[min];				a[min] = temp;			}		}				//遍历数组		for(int i=0;i<a.length;i++){   			System.out.println(a[i]);		}	}}结果:12356

三、二分法:

数学上的二分法:
二分法是指对于区间[a,b]上连续不断且f(a)·f(b)<0的函数y=f(x),通过不断地把函数f(x)的零点所在的区间一分为二,使区间的两个端点逐步逼近零点,进而得到零点近似值的方法。

相比于数学的二分法,我们这里的区间是在一个数组内,零点结尾要查找的数

二分法查找:

  • 1.二分法是建立在已经排好序的基础上

  • 2.以下示例是从小到大的排序方式排好的

  • 3.在这个数组中没有重复的数

  • 例如数组: 1 3 5 9 11 13 56

  • int begin = 0;
  • int end = 6;
  • int mid = 3;

中间元素是9,9<13

  • begin = mid+1;
  • end = 6;
  • mid = 5;

中间元素是13. 13==13
*/

public class MyArray {   	private static int binarySearch(int[] a, int destElement) {   		int begin = 0;		int end = a.length - 1;				while (begin <= end) {   			int mid = (begin + end) / 2;						分三类情况:			1.当数组内中间数等于要查询的数						if (a[mid] == destElement) {   				return mid;						2.当数组的中间数大于要查询的数						} else if (a[mid] > destElement) {   				end = mid - 1;			            3.当数组中的数小于要查询的数                        } else if (a[mid] < destElement) {   				begin = mid + 1;			}		}		return -1;		}	/**	 * @param args	 */	public static void main(String[] args) {   		// TODO Auto-generated method stub		int[] a = new int[] {    1, 3, 4, 5, 7, 8, 9, 10, 23, 25 };		int destElement = 10;		// 要求从这个数组里查找10元素的下标		int index = binarySearch(a, destElement);		System.out.println((index == -1) ? destElement + "元素不存在!"				: destElement + "在数组中的下标是:" + index)		}}结果:10在数组中的下标是:7

若查询的数不在数组中:

int[] a = new int[] {    1, 3, 4, 5, 7, 8, 9, 10, 23, 25 };		int destElement = 100;		// 要求从这个数组里查找10元素的下标		int index = binarySearch(a, destElement);		System.out.println((index == -1) ? destElement + "元素不存在!"				: destElement + "在数组中的下标是:" + index);			}结果:100元素不存在!	
上一篇:网页设计.css样式
下一篇:网页的基本页面实现----说旅游

发表评论

最新留言

哈哈,博客排版真的漂亮呢~
[***.90.31.176]2025年03月26日 16时27分18秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章