2020/07/14-Interpolación de matrices, eliminación, ordenación por inserción, ordenación por selección
1. Agregue un número a una secuencia de matrices ordenadas y aún mantenga el método de clasificación original
Ideas:
- (Si la matriz inicial es de 3 dígitos y es necesario agregar 1 dígito, reconstruya una matriz de 4 dígitos,
- La razón para reconstruir una matriz más grande es que cuando creó la matriz por primera vez, no sabía cuántos dígitos agregar más tarde.
- Por lo tanto, solo se crea el número requerido de longitudes de matriz al principio)
- Idea: agregar elementos al grupo de elementos debe aumentar o disminuir la capacidad de la matriz
- Si aumenta el número en 1, debe redefinir una matriz que sea 1 bit más grande que antes
- Luego use el bucle for para ensamblar el número anterior en la nueva matriz
- El último bit de la nueva matriz está vacío
public class demo4 {
public static void main(String[] args) {
int[] a = {
99,85,45,56,21};
int[] b = new int[6];
for (int i = 0; i < a.length; i++) {
b[i] = a[i];//b的最后一位没有赋值,相当于空,默认是0,
// 之后往里面添加数字相当于覆盖
}
System.out.println(Arrays.toString(b));
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个数:");
int num = sc.nextInt();
boolean isInsert = false;
for (int i = b.length-2; i >=0; i--) {
//-2是因为b本身大一位,且下标需小一位
if(num>b[i]){
//从后向前遍历,从大到小排序,将更小的数放进数组b的最后一个空位
b[i+1]=b[i];//下标后移
}else {
b[i+1]=num;
isInsert = true;
break;
}
}
if(isInsert==false){
//原数组所有数都比新增加的数小,故将新增加的数放在首位
b[0]=num;
}
System.out.println(Arrays.toString(b));
}
}
Dos, elimine un número de la matriz
Ideas:
- Similar a agregar un número a la matriz, vuelva a crear una nueva matriz con una más pequeña
- Escriba el subíndice del número que desea eliminar en la matriz
- Utilice el bucle for para poner los números de la matriz original en la nueva matriz hasta que i = el subíndice,
- contiune omite este ciclo.
public class test3 {
public static void main(String[] args) {
int[] a = {
99,85,80,63,60};
int[] b = new int[4];
Scanner sc = new Scanner(System.in);
System.out.println("请输入要删除的下标:");
int num = sc.nextInt();
int j = 0;
for (int i = 0; i < a.length; i++) {
if(i==num) continue;
b[i] = a[i];
j++;
}
System.out.println(Arrays.toString(b));
}
}
3. Ordene una cadena de elementos de matriz dados en orden ascendente utilizando el método de clasificación por selección
- [Métodos de clasificación básicos: selección de clasificación, clasificación de burbujas, clasificación de inserción] [Algoritmos de clasificación avanzados: clasificación rápida, clasificación de combinación]
- Ideas:
- El ciclo externo define el valor mínimo de cada valor a [i], compara el valor a [i] con cada valor subsiguiente y marca el valor mínimo y el subíndice del valor mínimo
- Asigne un [i] definido por el bucle exterior a la matriz correspondiente al subíndice del valor mínimo marcado, y luego asigne el valor mínimo marcado a un [i]
- Esto requiere la introducción de una variable para almacenar el subíndice
- Cabe señalar que al definir la variable, no se puede definir como 1, ni como un valor fijo.
- En cambio, debe definirse como i, porque no necesariamente produce intercambios en cada comparación de tiempo, y puede mantener la posición original sin cambios.
public class demo5 {
public static void main(String[] args) {
/*
选择排序逻辑:
从前向后对每一个下表对应的元素作为基准值
与后面所有的元素进行比较,找出最小值
与当前下标的元素进行交换
进行下一次循环
*/ int[] a={
7,6,2,5,8,4,12,3};
//i代表选取的基准位,j代表的在动的
for(int i=0;i<a.length-1;i++){
int min=a[i];
int tmp=i;
for (int j = i; j <a.length ; j++) {
if(min>a[j]){
min=a[j];
tmp=j;
}
}
a[tmp]=a[i];
a[i]=min;
}
System.out.println(Arrays.toString(a));
}
}
Cuatro, método de clasificación por inserción
- Idea: El bucle exterior comienza en el elemento 2 y lo compara con el número anterior cada vez.
- Por ejemplo: a [1]: compare un [0], si un [1] es grande, asigne un [0] a un [1]
- a [2]: comparar con 0, 1 matriz de subíndice
public class demo6 {
public static void main(String[] args) {
/*
逻辑:从第二位开始,向前比较,进行插入逻辑
*/
boolean isInsert = false;
int[] a = {
1,3,8,2,5,7};
for (int i = 1; i < a.length; i++) {
int tmp = a[i];
for (int j = i-1; j >=0 ; j--) {
//如果遇到比自己大的,大的值就后移
// 如果遇到比自己小的,就在后方插入
//如果一直没有插入,就插入首位
if(tmp<a[j]){
a[j+1]=a[j];
}else
{
a[j+1]=tmp;
isInsert = true;
break;}
}
if (isInsert!=true){
a[0]=tmp;
}
}
System.out.println(Arrays.toString(a));
}
}