1.冒泡法排序
冒泡法排序的思路:
- 第一步:从第一位开始,把相邻两位进行比较,如果发现前面的比后面的大,就把大的数据交换在后面,循环比较完毕后, 最后一位就是最大的
- 第二步: 再来一次,只不过不用比较最后一位
以此类推
package review3;
public class Test2 {
public static void main(String[] args) {
int[] a = new int[6];
bubble(a,a.length);
}
static void bubble(int[] a, int i) {
//未排序
System.out.print("未排序:");
for(int j = 0; j < i; j++) {
//生成1~100的随机数
a[j] = (int) (Math.random()*100);
System.out.print(a[j]+" ");
}
for(int j = 0; j < i-1; j++) {
for(int k = 0; k < i-j-1; k++) {
if(a[k] > a[k+1]) {
int temp = a[k];
a[k] = a[k+1];
a[k+1] = temp;
}
}
}
//冒泡排序后
System.out.print("\n冒泡排序后:");
for(int j = 0; j < i; j++) {
System.out.print(a[j]+" ");
}
}
}
2.选择法排序
选择法排序的思路:
- 把第一位和其他所有的进行比较,只要比第一位小的,就换到第一个位置来,比较完后,第一位就是最小的,
- 然后再从第二位和剩余的其他所有进行比较,只要比第二位小,就换到第二个位置来,比较完后,第二位就是第二小的
以此类推
package review3;
import java.lang.reflect.Array;
import java.util.Scanner;
public class Text1 {
public static void main(String[] args) {
int[] a = new int[6];
select(a,a.length);
}
static void select(int[] a, int i) {
//未排序
System.out.println("未排序:");
for(int j = 0; j < i; j++) {
//生成1~100的随机数
a[j] = (int) (Math.random()*100);
System.out.print(a[j]+" ");
}
for(int j = 0; j < i-1; j++) {
for(int k = j+1; k < i; k++) {
if(a[j] > a[k]) {
int temp = a[k];
a[k] = a[j];
a[j] = temp;
}
}
}
//选择排序后
System.out.println("\n选择排序后:");
for(int j = 0; j < i; j++) {
System.out.print(a[j]+" ");
}
}
}
3.用增强型for循环找出最大的那个数
利用增强型for循环遍历数组,每次都与最大值变量max比较,如果遍历到的值大于max则把值赋予max。
需要注意的是:增强型for循环只能用来取值,却不能用来修改数组里的值
package review3;
public class Test3 {
public static void main(String[] args) {
int[] a = new int[5];
int max = 0;
//企图用增强型for循环和随机数初始化数组
for(int value : a) {
value = (int)(Math.random()*100);
}
System.out.print("企图用增强型for循环初始化数组失败:");
//普通for循环和随机数初始化数组
for(int i = 0; i < a.length; i++) {
System.out.print(a[i]+" ");
a[i] = (int)(Math.random()*100);
}
System.out.print("\n普通for循环初始化数组");
//增强型for循环筛选出最大值
for(int value : a) {
System.out.print(value+" ");
if(value > max) {
max = value;
}
}
System.out.println("\n最大值:"+max);
}
}
4.练习-合并数组
首先准备两个数组,他俩的长度是5-10之间的随机数,并使用随机数初始化这两个数组,然后准备第三个数组,第三个数组的长度是前两个的和,最后通过System.arraycopy 把前两个数组合并到第三个数组中
package review3;
import java.util.Random;
public class Test4 {
public static void main(String[] args) {
int a = (int)(Math.random()*6+5);//生成5~10的随机数
int b = new Random().nextInt(6)+5;//生成5~10的随机数
int[] array1 = new int[a];
int[] array2 = new int[b];
int[] array3 = new int[a+b];
System.out.println("数组1的内容:");
for(int i = 0; i < array1.length; i++) {
array1[i] = new Random().nextInt(100)+1;//生成1~100的随机数
System.out.print(array1[i]+" ");
}
System.out.println("\n数组2的内容:");
for(int i = 0; i < array2.length; i++) {
array2[i] = new Random().nextInt(101)+1;//生成1~100的随机数
System.out.print(array2[i]+" ");
}
//复制数组
/**System.arraycopy(src, srcPos, dest, destPos, length)
*rc: 源数组
*srcPos: 从源数组复制数据的起始位置
*dest: 目标数组
*destPos: 复制到目标数组的起始位置
*length: 复制的长度
**/
System.arraycopy(array1, 0, array3, 0, array1.length);
System.arraycopy(array2, 0, array3, array1.length, array2.length);
System.out.println("\n合并后的数组:");
for(int value : array3) {
System.out.print(value+" ");
}
}
}
5.练习-二维数组
定义一个5X5的二维数组。 然后使用随机数填充该二维数组,找出这个二维数组里,最大的那个值,并打印出其二维坐标
package review3;
import java.util.Random;
public class Test5 {
public static void main(String[] args) {
int[][] a = new int[5][5];
int max = 10;
//最大值的坐标值
int x = 0;
int y = 0;
System.out.println("初始化二维数组:");
for(int i = 0; i < 5; i++) {
for(int j = 0; j < 5; j++) {
//随机生成10~99的整数
a[i][j] = new Random().nextInt(90)+10;
System.out.print(a[i][j]+" ");
}
System.out.println();
}
for(int i = 0; i < 5; i++) {
for(int j = 0; j < 5; j++) {
if(a[i][j] > max) {
max = a[i][j];
x = i;
y = j;
}
}
}
System.out.print("找到最大值:"+max);
System.out.printf(",其坐标是[%d][%d]",x,y);
}
}