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);
}

}

posted on 2017-08-11 09:24  我可不是隔壁的老王  阅读(129)  评论(0编辑  收藏  举报