JAVA_SE_Day07

排序算法

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

内部排序 : 所有的排序都在内存中完成

外部排序 : 需要借助磁盘,外部存储设备

算法的五大特征

  • 输入
  • 输出
  • 有穷性
  • 确定性
  • 可行性
public class Test1 {
    
    

	public static void main(String[] args) {
    
    
		// 冒泡排序
		int[] arr = new int[] {
    
    43,2333,21231,1231,23,89,74};
		for(int i = 0; i < arr.length - 1 ; i++) {
    
    
			for (int j = 0; j < arr.length - 1 - i ; j++ ) {
    
    
				if (arr[j] > arr[j+1]) {
    
    
					int temp = arr[j];
					arr[j] = arr[j+1];
					arr[j+1] = temp;
				}
			}
		}
		for(int i = 0; i < arr.length; i++) {
    
    
			System.out.print(arr[i]+" ");
		}

	}

}

数组练习

public class Test {
    
    

	public static void main(String[] args) {
    
    
		// 杨辉三角
		int[][] arr = new int[10][];
		// 数组赋值
		for(int i = 0; i < arr.length; i++) {
    
    
			// 创建子数组 
			arr[i] = new int[i+1];
			// 首位赋值
			arr[i][0] = arr[i][i] = 1;
			// 给第三行开始的元素赋值
			if( i > 1) {
    
    
				for(int j = 1 ; j < arr[i].length-1;j++) {
    
    
					arr[i][j] = arr[i-1][j-1] + arr[i-1][j];
				}
			}	
		}
		// 打印数组
		for (int i = 0; i < arr.length; i++) {
    
    
			for (int j = 0 ; j < arr[i].length;j++) {
    
    
				System.out.print(arr[i][j]+" ");
			}
			System.out.println();
		}
		
		
		// 数组反转
		String[] str1 = new String[] {
    
    "A","B","C","D"};
		for (int i = str1.length - 1, j = 0; j < i; j++, i --) {
    
    
			String temp = str1[j];
			str1[j] = str1[i];
			str1[i] = temp;
		}
		
		for(int i = 0 ; i < str1.length; i++) {
    
    
			System.out.print(str1[i]+" ");
		}
		System.out.println();
		
		// 线性查找
		int[] arr1 = new int[] {
    
    12,34,10,-12,56,78};
		int desc = 10;
		boolean flag = true;
		lablefor: for(int i = 0; i < arr1.length; i++) {
    
    
			if(desc == arr1[i]) {
    
    
				System.out.println("找到了,其索引位置为 "+i);
				flag = false;
				break lablefor;
			}
		}
		if(flag) {
    
    
			System.out.println("数字未找到!");
		}
		
		// 二分查找 (必须是有序数组)
		int[] arr2 = new int[] {
    
    1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
		int desc1 = 9;
		int head = 0;
		int end = arr2.length - 1;
		boolean flag1 = true;
		while(end >= head) {
    
    
			int mid = (head + end) / 2; 
			if(arr2[mid] == desc1) {
    
    
				System.out.println("找到了,其索引位置为 "+mid);
				flag1 = false;
				break;
			}else if(arr2[mid] > desc1) {
    
    
				end = mid  - 1;
			}else {
    
    
				head = mid + 1;
			}
		}
		if (flag1) {
    
    
			System.out.println("数字未找到!");
		}

	}

}

Arrays工具类

import java.util.Arrays;
public class ArrayTest {
    
    
	public static void main(String[] args) {
    
    
		// boolean equals(int[] a,int[] b) : 判断是否相等
		int[] a = new int[] {
    
    1,2,3,4,5};
		int[] b = new int[] {
    
    7,2,5,4,9};
		boolean flag1 = Arrays.equals(a, b);
		System.out.println(flag1);
		
		// String toString(int[] a) : 输出数组信息
		System.out.println(Arrays.toString(a));
		
		//void fill(int[] a,int val) : 将指定值赋值到数组
		Arrays.fill(a, 1);
		System.out.println(Arrays.toString(a));
		
		// void sort(int[] a) : 对数组进行排序
		Arrays.sort(b);
		System.out.println(Arrays.toString(b));
		
		//int binarySearch(int[] a,int key) :  二分查找
		int[] c = new int[] {
    
    12,45,-12,67,44,78};
		int index = Arrays.binarySearch(c, -12);
		if (index >= 0) {
    
    
			System.out.println(index);
		}else {
    
    
			System.out.println("Error");
		}
		

	}

}

猜你喜欢

转载自blog.csdn.net/qq_42091436/article/details/112986174