java学习:数组、二分法、排序算法、Arrays工具类

1.二分法查找

前提:所查找的数组必须有序

代码实现:

package yewenling;

public class ArrayTest6 {
public static void main(String[] args) {
	int[] array = new int[] {-98,-34,2,34,54,66,79,105,210,333};
	int dest1 = -35;
	int head =0;
	int end = array.length-1;
	boolean att = true;
	while(head<=end) {
		int middle = (head+end)/2;
		if(dest1==array[middle]) {
			System.out.println("dest1在数组中的位置为:"+middle);
			att = false;
			break;
		}else if(dest1<array[middle]) {
			end = middle-1;
		}else if(dest1>array[middle]) {
			head = middle+1;
		}
	}
	if(att) {
		System.out.println("很遗憾,没有找到这个数");
	}
		
}
} 

2.算法与排序算法

1.算法的5大特征
        1.输入( Input):有0个或多个输入数据,这些输入必须有清楚的描述和定义

        2.输出( Output):至少有1个或多个输出结果,不可以没有输出结果
        3有穷性(有限性,Finiteness ):算法在有限的步骤之后会自动结束而不会无限循环,并且每一个步骤可以在可接受的时间内完成
        4.确定性(明确性,Definiteness ):算法中的每一步都有确定的含义,不会出现二义性
        5.可行性(有效性,Effectiveness ):算法的每一步都是清楚且可行的,能让用户用纸笔计算而求出答案
        说明:满足确定性的算法也称为:确定性算法。现在人们也关注更广泛的概念,例如考虑各种非确定性的算法,如并行算法、概率算法等。另外,人们也关注并不要求终止的计算描述,这种描述有时被称为过程( procedure) 。

2.衡量排序算法的优劣:

  1. 时间复杂度:分析关键字的比较次数和记录的移动次数
  2. 空间复杂度:分析排序算法中需要多少辅助内存
  3. 稳定性:若两个记录A和B的关键字值相等,但排序后A、B的先后次序保持不变,则称这种排序算法是稳定的。


3.排序算法分类:内部排序和外部排序。

  1. 内部排序:整个排序过程不需要借助于外部存储器(如磁盘等),所有排序操作都在内存中完成。
  2. 外部排序:参与排序的数据非常多,数据量非常大。计算机无法把整个排序过程放在内存中完成,:必须借助于外部存储器〈如磁盘)。外部排序最常见的是多路归并排序。可以认为外部排序是由多次内部排序组成。

4.十大内部排序法(前八个为常用的排序方法):

        1.选择排序法:直接选择排序、堆排序;

        2.交换排序:冒泡排序、快速排序;

        3.插入排序:直接插入排序、折半插入排序、shell排序;

        4.归并排序

        5.桶式排序

        6.基数排序

5.冒泡排序 (O(n^{2}))    

代码实现:

package suanfa;
/*
 * 冒泡排序
 * 
 * 
 */
public class BubbleSort {
public static void main(String[] args) {
	int[] arr = new int[] {32,45,12,878,652,-2};
	
	for(int i=0;i<arr.length-1;i++) {
		int max;
		for(int j=0;j<arr.length-1-i;j++) {
			if(arr[j]>arr[j+1]) {
				max=arr[j];
				arr[j]=arr[j+1];
				arr[j+1]=max;
			}
		}
	}
	for(int i=0;i<arr.length;i++) {
		System.out.print(arr[i]+"\t");
	}
}
}

6.快速排序(O(n{log_{2}}^{n}))

https://blog.csdn.net/weixin_37817685/article/details/79969349

3.Arrays工具类

package suanfa;
/*
 * java.util.Arrays :操作数组的工具类,里面定义了很多操作数组的方法
 * 
 * 
 */
import java.util.Arrays;
public class Arraystest {

	public static void main(String[] args) {
		//1.boolean equals(int[] a,int[] b):判断两个数组是否相等
		int[] num1 = new int[] {1,3,2,4};
		int[] num2 = new int[] {1,2,3,4};
		int[] num3 = new int[] {-10,1,3,5,8,21,22,44,67,100};
		boolean IsEquals = Arrays.equals(num1, num2);
		System.out.println(IsEquals);
		//2.String toString(int[] a):输出数组信息
		System.out.println(Arrays.toString(num1));
		//3.void fill(int[] a,int val):将指定的值填充到数组当中(即将原来的参数替换为指定的值)
		Arrays.fill(num2, 0);
		System.out.println(Arrays.toString(num2));
		//4.void sort(int[] a):对数组进行排序
		Arrays.sort(num1);
		System.out.println(Arrays.toString(num1));
		
		//5.int binarySearch(int[] a,int key):二分查找
		int index = Arrays.binarySearch(num3, 8);
		System.out.println(index);
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值