2020/07/14-Array --- interpolación, eliminación, ordenación por inserción, ordenación por selección

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

Supongo que te gusta

Origin blog.csdn.net/qq_42005540/article/details/107349192
Recomendado
Clasificación