文章目录

  • 1.选择排序
  • 2.插入排序
  • 3.二维数组


1.选择排序


选择排序:
从数组第一个元素开始,依次和全部元素进行比较大小,交换位置,直到全部排序完成.

public class ArraySort01 {
    //选择排序方法一:

    public static void main(String[] args) {
        int[] a={10,9,8,7,6};
        //推算过程
        //9,10,8,7,6
        //8,10,9,7,6
        //7,10,9,8,6
        //6,10,9,8,7
        //6,9,10,8,7
        //6,8,10,9,7
        //6,7,10,9,8
        //6,7,9,10,8
        //6,7,8,10,9
        //6,7,8,9,10
        //外层循环;取出数组中的元素
        for (int i = 0; i < a.length-1; i++) {
          //内层循环;遍历数组进行比较
            for (int j = i+1; j < a.length ; j++) {
                if(a[i]>a[j]){
                    int temp=a[i];
                    a[i]=a[j];
                    a[j]=temp;
                }
            }
        }
        System.out.println(Arrays.toString(a));
    }
}

输出:

[6, 7, 8, 9, 10]

每个数遇到比它小的数字就交换位置;这导致种方式的运行时间过长;即时间复杂度方面有待优化;


优化:

public class ArraySort02 {
    //选择排序优化
    public static void main(String[] args) {
        int[] a={10,9,8,1,7,6};
        //推算过程
        //1,9,8,10,7,6
        //1,6,8,10,7,9
        //1,6,7,10,8,9
        //1,6,7,8,10,9
        //1,6,7,8,9,10
    
      
        for (int i = 0; i < a.length-1; i++) {
            //定义最小值的索引
            int min=i;
            //遍历数组,比较大小得出最小值的所在下标;只是标记位置;
            for (int j = i+1; j < a.length; j++) {
                if(a[min]>a[j]){
                 min=j;
                }
            }
            //进行交换
            int temp=a[min];
            a[min]=a[i];
            a[i]=temp;
        }
        System.out.println(Arrays.toString(a));
    }
}

输出:

[1, 6, 7, 8, 9, 10]

2.插入排序


假设第一个数组元素已经排序;由第二个数组元素开始,由该元素的位置向前,与前面的元素进行比较;
如果它比前面的数组元素都大,那么它就不移动;
它比前面的元素小,则它替换掉前面的元素位置,被它替换的元素向后移动一个位置;
以此类推,直到所有元素排序完成.

public class Array001 {
    //插入排序简化版
    public static void main(String[] args) {

        int[] a = {4, 3, 1, 8, 6};
        //外层循环;取出第二个数到最后一个数
        for (int i = 1; i < a.length; i++) {
            for (int j= i; j>0; j--) {
                if(a[j-1]>a[j]){
                    int temp=a[j];
                    a[j]=a[j-1];
                    a[j-1]=temp;
                }
            }
        }
        //输出排序完成的数组
        System.out.println(Arrays.toString(a));
        //[1, 3, 4, 6, 8]
    }
}

输出:

[1, 3, 4, 6, 8]

该方法虽然可以完成排序;在运行时却多了几步不必要的位置交换;


优化:

public class Array002 {
    //插入排序
    public static void main(String[] args) {

        int [] a={4,3,5,2,6};
        //3 4 5 2 6
        //2 3 4 5 6
        //current记录当前准备进行排序的元素
        int current =0;
        //
        for (int i = 0; i < a.length-1; i++) {
            //perIndex记录当前比较的元素的位置
            int perIndex=i;

            current= a[i+1];
            while(perIndex>=0 && a[perIndex]>current){
                a[perIndex+1]=a[perIndex];
                perIndex--;
            }
            //替换位置
            a[perIndex+1]=current;
        }
        System.out.println(Arrays.toString(a));
    }
}

输出:

[2, 3, 4, 5, 6]

3.二维数组


二维数组中的每个元素是一个一维数组;二维数组就是以数组作为数组元素的数组.


声明:
和一维数组类似:

int[][] a;//常用方式
int a[][];

创建:

静态初始化:在创建时,就直接给数组中的元素直接赋值;

例如:
int[ ][ ] a = {{2,2,1},{5,1,4},{6,7,9}};
int[ ][ ] a = new int[ ][ ]{{11,20,23},{15,12,14},{18,19,3}};


动态初始化:在创建时,给了数组长度,没有给数组中的元素赋值;
例如: int [ ][ ] a = new int[4][3];
该二维数组中包含了4个一维数组;每个一维数组的长度为3;
当没有给定一维数组长度时,也是可以的,之后可以根据需要进行赋值:
例如:

int[][] a=new int[4][];
        a[0]=new int[]{3};
        a[1]=new int[]{1,2,3,6};
        a[2]=new int[4];
        System.out.println(Arrays.deepToString(a));
        //输出二维数组a
        //[[3], [1, 2, 3, 6], [0, 0, 0, 0], null]

其中,给二维数组a的第一个一维数组(即a[ 0])静态创建赋值,它的长度为1;输出为[3];

二维数组a的第二个一维数组(即a[ 1])静态创建赋值,它的长度为4;输出[1, 2, 3, 6]
;
二维数组a的第三个一维数组(即a[ 2])动态创建,它的长度为4;但是没有赋值;int型默认为0;所以输出的是[0, 0, 0, 0];

并没有给二维数组a中的第四个一维数组(即a[ 3])长度,所以它输出null;


二维数组的遍历:

public class Demo01 {
    public static void main(String[] args) {
        //二维数组创建
        int [][] a={{1,2,3},{4,6},{4,3,55}};
        //二维数组的遍历
        for (int i = 0; i <a.length ; i++) {
            for (int j = 0; j < a[i].length; j++) {
                System.out.print(a[i][j]+"\t");
            }
        }
        //遍历
        // 1	2	3	4	6	4	3	55	
    }
}

Debug调试

在开发工具中使用debug调试

断点 :在需要调试代码行设置一个断点;然后开始debug调试模式;

使用debug模式运行

F7键 step into 可以进入到调用的方法中;

F8键 step over 进行逐步调试 ,不会进入到调用的方法中;

shift + F8键 Step Out 跳出调试