1.插入:
插入算法:
前提是数组中的数据必须是有序的
public static void main(String[] args) {
// 先定义一个int类型的数组 int[] nums = new int[6]; nums[0] = 1; nums[1] = 5; nums[2] = 7; nums[3] = 9; nums[4] = 10; /** * 我们想把 一个数字 插入到数组中 并且保证 数组的顺序 * * 分析: * 01.首先那我们输入的这个数字 循环和数组中的每一个元素进行比较大小 * 02.发现我们输入的这个数字 小于 某个元素的时候 (数组是升序 使用 小于 降序使用大于) * 那么这个元素的下标 应该是我们输入的这个数字的下标 */ Scanner input = new Scanner(System.in); int index = nums.length - 1; // 存储插入数字的下标 System.out.println("请您输入一个数字:"); int num = input.nextInt(); for (int i = 0; i < nums.length; i++) { if (num < nums[i]) { // 找到插入数字的下标 index = i; break; // 找到下标 必须退出 } } System.out.println("您插入数字的下标是:" + index); /** * 分析 : * 01.从哪里开始后移?? * 从我们插入数字的下标位置开始往后移??? * 难道是5往后移?? * 应该是10先往后移!!! 从后往前依次后移 并且赋值 * 02.把插入的数字放进数组的指定位置 */ for (int i = nums.length - 1; i > index; i--) { nums[i] = nums[i - 1]; } nums[index] = num; // 赋值 System.out.println(Arrays.toString(nums)); // 把数组转换成Stirng }2.冒泡排序:
01.两两相比,小的靠前
02.等量转换
public static void main(String[] args) {
// 声明一个数组 int[] nums = { 10, 5, 7, 20, 50 };/**
* 外层循环控制比较几轮 数组长度-1 * 内层循环控制一轮比较多少次! 数组长度-1-i * 外层循环执行一次! 内层循环执行一轮! * * * 如果说外层循环的变量是i=0 * 内层循环的变量是j=0 并且j<5! * * * 那么: i=0的时候 j会从0到4 * i=1的时候 j也会从0到4 以此类推 * 直到i不满足条件的时候 双重循环才结束! */for (int i = 0; i < nums.length - 1; i++) { // 外层循环 控制轮数
System.out.println("外层循环====》第" + (i + 1) + "轮"); for (int j = 0; j < nums.length - 1 - i; j++) { // 内层循环 // 两两相比小靠前! if (nums[j] > nums[j + 1]) { // 等量转化 int temp = nums[j]; nums[j] = nums[j + 1]; nums[j + 1] = temp; } } }for (int i : nums) {
System.out.println(i); } }3.二维数组:
实质还是一维数组!
只不过数组中的每一个元素,又是一个数组而已!01.
// 在声明二维数组的时候 必须指定外围数组的长度
int[][] nums = new int[2][2]; // int[][] nums = { {x,x}, {x,x} }; // 给nums数组中的第一个数组的第一个元素赋值 nums[0][0] = 5; nums[0][1] = 51; nums[1][0] = 6; nums[1][1] = 62;for (int i = 0; i < nums.length; i++) {
for (int j = 0; j < nums[i].length; j++) { System.out.println(nums[i][j]); }02.
int[][] nums = { { 1 }, { 2, 5 }, { 7, 9 } };
/** * 上面定义的二维数组 有几个元素 * 01.输出二维数组的长度 *二维数组中每一个元素的长度??我们怎么获取呢? * 02.循环二维数组 之后 nums[i]代表每一个元素,所以就.length * 我想获取每个值!!! */ // System.out.println(nums.length); 2维数组的长度 for (int i = 0; i < nums.length; i++) { // System.out.println(nums[i].length); 数组中元素的长度 for (int j = 0; j < nums[i].length; j++) { System.out.println(nums[i][j]); }03.
/**
* 3个班级,每班3名学员 * 循环录入成绩 * 求每个班平均分 * 用二维数组 */ public static void main(String[] args) { Scanner input = new Scanner(System.in); double[][]scores = new double[3][3];//二维数组来保存班级和班级里的学员数 double sum = 0;//和 double avg = 0;//平均分 for (int i = 0; i < scores.length; i++) {//外层 班级数来控制 System.out.println("第"+(i+1)+"个班级:"); sum = 0;//每个班级算完平均分以后使和归零 for (int j = 0; j < scores[i].length; j++) {//内层 班级人数 System.out.println("请输入第"+(j+1)+"名学员的成绩:"); scores[i][j]= input.nextDouble(); sum = sum + scores[i][j];//每位学员的成绩 } avg = sum/3;//每个班级平均分 System.out.println("第"+(i+1)+"个班级的平均分是:"+avg); }}
04.
/**
* 硕哥电话号 */ public static void main(String[] args) { int[]phoneNums = {x,1,x,x,9,8,0,4};//电话号码中的数字 int[]nums = {1,0,3,0,2,6,7,4,4,4,5};//来找到电话号码数组中的数字的下标 int phone = 0;//电话号码初始化 for(int i =0;i<nums.length;i++){//利用for循环输出电话号码 phone = phoneNums[nums[i]]; System.out.print(phone); }}