Day05_数组、排序

一、数组

  1. 栈内存空间

存放方法中的局部变量

  1. 堆内存
  • 只要new出来的就存在堆内存

  • 堆内存里面的东西都有一个地址值

  • 堆内存都有默认值

int 默认值为0

String 默认值为null

boolean 默认值为false

  1. 方法区

存储class相关的信息包含方法的信息

创建数组(三种方式)

  • 第一种方式

    int[] nums = {1,2,3,4,5};
    
  • 第二种方式

    int nums2[] = new int[5]; //容量为5    每个值默认为0
    
  • 第三种方式

    int[] nums3 = new int[]{1,2,3,4,5};
    // nums2[5] = 5;    ArrayIndexOutOfBoundsException 数组下标越界异常
    

    注意:错误方式

    int[] nums = new int[5]{1,2,3,4,5};  // 报错。错误写法    注意笔试题!
    
  • 遍历数组

    for(int i=0;i<nums.length;i++){
        System.out.print(nums[i]+"\t");
    }
    
    //System.out.println(nums)   输出的是数组的地址值
    

内存图

  • 第一种情况

在这里插入图片描述

  • 第二种情况

在这里插入图片描述

二、排序

冒泡排序

原理:比较相邻的两个元素,将最大的值交换到最右边

思路:依次比较相邻的两个元素。将小的值放到左边,将大的值交换到最右边。

public class Test004 {
    public static void main(String[] args) {

        /*
        int[] nums = new int[]{4,1,8,3,9,5};
        for (int i=nums.length-1;i>0;i--){
            for (int j=0;j<i;j++){
                if (nums[j]>nums[j+1]){
                    int temp = nums[j];
                    nums[j] = nums[j+1];
                    nums[j+1] = temp;
                }
            }
        }*/

        int[] nums = new int[]{1,4,6,8,9};
        for (int i=nums.length-1;i>0;i--){
            //假设都是排好的
            boolean flag = true;
            for (int j=0;j<i;j++){
                if (nums[j]>nums[j+1]){
                    int temp = nums[j];
                    nums[j] = nums[j+1];
                    nums[j+1] = temp;
                    flag = false;//只要进去就设置为false
                }
            }
            if (flag){
                break;
            }
        }

        for (int i=0;i<nums.length;i++){
            System.out.print(nums[i]+"\t");
        }
    }
}

选择排序

原理:从序列中找到最大的那个元素,然后放到末尾,把原来末尾的元素,放到最大值的位置,即将最大值与末尾值交换位置(或者找到最小的元素,然后放在第一个数字,把第一个数字放在最小值的位置,即将最小值与首值交换位置)

忽略:曾找到最大元素(曾找到最小元素)

//选择排序
// 选择最小元素与第一个元素交换位置
public class SelectSort {
    public static void main(String[] args) {
        int[] array = new int[]{9,4,6,1,7,5,3};
        int minIndex=0 ;

        for (int i=0;i<array.length;i++){
            minIndex = i;
            for (int j=i;j<array.length;j++){  //寻找最小元素下标
                if (array[j]<array[minIndex]){
                    minIndex = j;
                }
            }

            int temp = array[minIndex];
            array[minIndex] = array[i];
            array[i] = temp;

            System.out.println("\n");
            for (int k=0;k<array.length;k++){
                System.out.print(array[k]+"\t");
            }
        }

        for (int i=0;i<array.length;i++){
            System.out.print(array[i]+"\t");
        }
    }
}

快速排序

Arrays.sort(nums);//是快速排序和优化的归并排序
package zengstudy.day10;

import java.util.Arrays;

public class Test002 {
    public static void main(String[] args) {
        int nums[] = {2,5,1,9,6};
        for (int i=0;i<nums.length;i++){
            System.out.print(nums[i]+"\t");
        }

        System.out.println("\n");
        //排序
        Arrays.sort(nums);//快速排序和优化的归并排序
        for (int i=0;i<nums.length;i++){
            System.out.print(nums[i]+"\t");
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值