IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 2022-7-15 第三小组 黄均睿 学习日记(day8) -> 正文阅读

[数据结构与算法]2022-7-15 第三小组 黄均睿 学习日记(day8)

目录

java八大排序

*冒泡排序

*选择排序

*插入排序

线性查找

二分查找?

数组的动态扩充

练习题

*员工管理系统

员工管理系统2

总结


java八大排序

常用:

冒泡排序

选择排序

插入排序

不常用:

快速排序

希尔排序

堆排序

归并排序

桶排序

int[] arr = new int[]{1,2,-8,35,99};

定义数组的格式

*冒泡排序

public class J冒泡排序 {
    public static void main(String[] args) {

//        定义数组
        int []arr = new int[]{1,8,5,-10,99};
        
//        冒泡排序两层循环嵌套
//        外层for循环控制的是需要各个数之间比较几轮
//        内层for循环控制的是每个数真正的比较

//        比较的次数=数组长度-1,因为不能和自己比较
//        i、j是下标
        for (int i = 0; i < arr.length-1; i++) {

//           因外j+1会越界,所有arr.length会越界,改成length-1
//            因为外层遍历次数逐渐减少所以-i
            for (int j = 0; j < arr.length-1-i; j++) {

//                >输出从小到大,<输出从大到小
                if(arr[j]>arr[j+1]){

//                    设置第三方
                      int temp= arr[j+1];
                      arr[j+1]=arr[j];
                      arr[j]=temp;
                }
            }
//            因为下标从零开始所有++i好辩认
            System.out.println("第"+(i+1)+"轮的比较结果是:");
            for (int i1 : arr) {
//                不换行
                System.out.print(i1+"、");
            }
            System.out.println();
        }
    }
}

(遇小则换位,每一轮确定一个最大值)步骤:

1.定义数组

2.外循环

3.内循环

4.输出数据(设置第三方)

5.打印数据

*选择排序

public class J选择排序 {
    public static void main(String[] args) {
//            定义数组
        int []arr = new int[] {3,1,5,-8,99,10};

//        外层for循环控制轮
        for (int i = 0; i < arr.length; i++) {

//            假设最小数的下标,随着循环每一轮最小值会变
//            min和i都递增可以联系 min=i
            int min = i;
//            进行比较
//            每回都有变化所以j=i,因为不用和自己比较所有j=i+1
//            虽然j=i+1和length—1效果一样,但是length-1会导致比较的数少一个,所以用j=i+1
            for (int j = i+1; j < arr.length; j++) {
//                找到最小值
//                >从小到大<从大到小
                if(arr[min]>arr[j]){
//                    保存最小值的下标
                    min = j;
                }
            }
//            换位
            int temp = arr[min];
            arr[min]=arr[i];
            arr[i] =temp;
            System.out.print("第"+(i+1)+"次比较结果是:");
            for (int i1 : arr) {
                System.out.print(i1+"、");
                
            }
            System.out.println();
        }
        for (int i :arr) {
            System.out.print(i+"、");
//        }
    }
}

(遇最小则换位,每一轮确定一个最小值)步骤:

1.定义数组

2.外循环

3.设最小下标

4.内循环

5.保存最小下标

6.换位

*插入排序

public class J插入排序 {
    public static void main(String[] args) {
        int[] arr = new int[]{1, 2, -8, 35, 99};
//        定义参照物
        int current = arr[1];
//        length-1防范越界
        for (int i = 0; i < arr.length - 1; i++) {
            int pre = 0;
            if (current > arr[i]) {
                current = arr[i + 1];
//            定义上个元素下标
                pre = i;
            }

//            当上一个数下标是有效的
//            并且保证当前数比上一个数小
//            这是才能向前插入
            while (pre >= 0 && current < arr[pre]) ;
            {

//            移位:前面的数后移一位
                arr[pre + 1] = arr[pre];

                pre--;
            }
            arr[pre + 1] = current;
        }
        for (int i : arr) {
            System.out.println(i + "、");
        }
    }
}

(第一个数和每个数比较,小则往前插入,直到没有更小结束这一轮)步骤:

1.定义数组 定义参照物

2.外层循环

3.定义上个下标元素

4.进入while循环并移位

有明确值选择个数不多时就用switch

线性查找

import java.util.Scanner;

//输入一个数,若在数组输出下标,若不在输出在目标数组中不存在
//线性查找
public class J线性查找 {
    public static void main(String[] args) {

        int[] arr = new int[]{1,5,8,25,50};
        Scanner sc= new Scanner(System.in);
        System.out.println("请输入一数字");
        int num =sc.nextInt();

        boolean flag=false;
        int index = -1;
        for (int i=0;i<arr.length;i++){

            if(arr[i] == num){
               flag= true;
               index=i;
                break;
            }

            }
        if ((flag)){
            System.out.println("你要找的数是\"+num+\"在目标数组中的下标是"+index);
        }else {
            System.out.println("你要找的数是"+num+"在目标数组中不不存在");
        }

    }
}

二分查找?

import java.util.Scanner;

//二分法查找
public class J二分法查找 {
    public static void main(String[] args) {
        int[]arr = new int[]{1,3,5,10};
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入查找的数字");
        int target = sc.nextInt();
//        最左边下标
        int left = 0;
//        最右边下标
        int right =arr.length-1;

        if(target<arr[left]||target>arr[right]){
            System.out.println(target+"在目标数组中不存在!");
        }else {
//            用来保存下标的值
            int res = -1;
            while (left<= right){
//                找出中间的下标
                int middle = (left+right)/2;
                if(arr[middle]==target){
//                    中间的数恰巧是我们找的数
                    res = middle;
                    break;
                }else  if (arr[middle]>target){
//                    说明我们找的在前半区
                    right =middle-1;
                }else {
                    left =middle+1;
                }
            }
            System.out.println("");
        }
    }
}

数组的动态扩充

就这个就是在对数组赋值时,如果数组已经满了以后我们还要对其进行添加数据,那么我们就会对其进行扩充。其实这个案例并不难,我们在对数组进行赋值之前可以判断一下,如果数组已经满了我们就对其进行扩容,随后继续赋值操作。但是怎么判断数组是否已经满了呢?在这里我们可以定义一个int类型的变量num来存储数组中元素的个数,它的初始值是0,当我们每次赋值以后我们就把它加1,这样我们就有了数组元素的个数。然后我们用数组元素个数num和数组最大长度arr.length进行比较,就可以知道数组是否满了。

下面我们就对数组进行扩充,我们先定义一个临时的数组temp,他的长度是原来数组长度的二倍,随后我们将原数组中数组元素逐个赋值到临时数组中temp,最后我们再将临时数组赋给原来的数组arr这就完成了对数组容量的扩充。下面我们来看看具体的代码实现:

import java.util.Arrays;
import java.util.Scanner;

public class Java04 {

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int[] arr = new int[5];
        int i = 0;
        while (true) {
            if (i == arr.length) {
                int[] temp = new int[2 * arr.length];
                for (int j = 0; j < arr.length; j++) {
                    temp[temp.length - 1 - j] = arr[arr.length - j - 1];
                }
                arr = temp;
            }
            System.out.println("请输入第"+ (i + 1) +"个数:");
            arr[arr.length - 1 - i] = in.nextInt();
            i++;
            System.out.println("是否继续添加?(1 继续, 其他结束");
            int tem = in.nextInt();
            if (tem != 1) {
                System.out.println(Arrays.toString(arr));
                break;
            }
        }
    }
}

练习题

*员工管理系统

import java.util.Objects;
import java.util.Scanner;

public class J715ZY {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String[][] employeeData = new String[2][3];
        //int id = 1, name = 1, hobby = 1;
        int employeeNum = 0;
        top:
        while (true) {
            System.out.println("欢迎使用员工管理系统:\n*  *  *  *  *  *  *  *  * ");
            System.out.println("*    输入数字请选择功能\t*\n*       1:添加员工\t\t*\n*       2:查询员工\t\t*\n* " +
                    "      3:修改员工:\t\t*\n*       4:删除员工 \t\t*\n*       0:退出系统 \t\t*\n*  *" +
                    "  *  *  *  *  *  *  *");
            String flag = in.next();
            switch (flag) {
                case "1":
                    while (true) {
                        if (employeeNum >= employeeData.length) {
                            String[][] temp = new String[2 * employeeData.length][3];
                            for (int i = 0; i < employeeData.length; i++) {
                                for (int j = 0; j < 3; j++) {
                                    temp[i][j] = employeeData[i][j];
                                }
                            }
                            employeeData = temp;
                        }
                        employeeData[employeeNum][0] = "Ygh" + (employeeNum + 1);
                        System.out.println("请输入员工姓名:");
                        employeeData[employeeNum][1] = in.next();
                        System.out.println("请输入员工爱好:");
                        employeeData[employeeNum][2] = in.next();
                        employeeNum++;
                        System.out.println("添加成功!\n是否继续添加?(输入 1 继续添加,输入 2 回到主页面,输入其它退出系统!)");
                        String temp = in.next();
                        if (temp.equals("1"))
                            continue;
                        else if (temp.equals("2"))
                            continue top;
                        break top;
                    }
                case "2":
                    top2:
                    while (true) {
                        System.out.println("请选择你要查询的类型序号:\n:1:通过员工号查询\n2:查询全部");
                        String temp_1 = in.next();
                        if(temp_1.equals("2")){
                            for (int i = 0; i < employeeNum; i++) {
                                for (int j = 0; j < 3; j++) {
                                    System.out.print(employeeData[i][j] + "   ");
                                }
                                System.out.println();
                            }
                        }
                        else if(temp_1.equals("1")){
                            System.out.println("请输入你要查询的员工号(Ygh + 序号):");
                            String id = in.next();
                            for (int i = 0; i < employeeNum; i++) {
                                if (id.equals(employeeData[i][0])) {
                                    System.out.println("员工号:" + employeeData[i][0] + "\n员工姓名:" +
                                            employeeData[i][1] + "\n员工爱好:" + employeeData[i][2]);

                                    System.out.println("查询成功!\n是否继续查询?(输入 1 继续查询,输入 2 回到主页面," +
                                            "输入其它退出系统!)");
                                    String temp = in.next();
                                    if (temp.equals("1"))
                                        continue top2;
                                    else if (temp.equals("2"))
                                        continue top;
                                    break top;
                                }
                            }
                            System.out.println("没有此员工号的员工,请重新输入或者按2回到主页面,输入其它退出系统!");
                            String temp = in.next();
                            if (temp.equals("2"))
                                continue top;
                            break top;
                        }
                        else
                            System.out.println("你输入的有误,请重新输入。");
                    }

                case "3":
                    top3:
                    while (true) {
                        System.out.println("请输入你要修改的员工号(Ygh + 序号):");
                        String id = in.next();
                        for (int i = 0; i < employeeNum; i++) {
                            if (id.equals(employeeData[i][0])) {
                                System.out.println("员工号:" + employeeData[i][0] + "\n员工姓名:" +
                                        employeeData[i][1] + "\n员工爱好:" + employeeData[i][2]);
                                System.out.println("请输入你要修改的姓名:");
                                employeeData[i][1] = in.next();
                                System.out.println("请输入你要修改的爱好:");
                                employeeData[i][2] = in.next();
                                System.out.println("修改成功!\n是否继续修改?(输入 1 继续修改,输入 2 回到主页面," +
                                        "输入其它退出系统!)");
                                String temp = in.next();
                                if (temp.equals("1"))
                                    continue top3;
                                else if (temp.equals("2"))
                                    continue top;
                                break top;
                            }
                        }
                        System.out.println("没有此员工号的员工,请重新输入或者按2回到主页面,输入其它退出系统!");
                        String temp = in.next();
                        if (temp.equals("2"))
                            continue top;
                        break top;
                    }

                case "4":/*
                 *选做
                 */
                case "0":
                    break top;
                default:
                    System.out.println("请重新输入。");
            }
        }
        System.out.println("谢谢使用员工管理系统,再见!!!");
    }
}

员工管理系统2

import java.util.Scanner;

public class Jhai {
    public static void main(String[] args) {
        int[] number = new int[2];
        String[] name = new String[2];
        int count = 0;
        top:while (true){
            System.out.println("按1进入添加,按2查询,按3修改");
            Scanner sc = new Scanner(System.in);
            int a = sc.nextInt();

            switch (a) {
                case 1:
//                为了重复添加输入
                    top1:
                    while (true) {
                        if (count == number.length) {
                            int[] tempNumber = new int[number.length * 2];
                            String[] tempName = new String[number.length * 2];
                            for (int i = 0; i < number.length; i++) {
                                tempNumber[i] = number[i];
                                tempName[i] = name[i];
                            }
                            number = tempNumber;
                            name = tempName;
                        }
                        System.out.println("请输入姓名:");
                        name[0] = sc.next();
                        number[0] = count + 1;
                        System.out.println(number[count]);
                        count++;

                        System.out.println("添加成功!是否继续添加?输入1继续,输入2返回主页面");
                        while (true) {
                            int temp = sc.nextInt();
                            if (temp == 1)
//                        返回whlie
                                continue top1;
                            else if (temp == 2)
                                continue top;
                            else
                                System.out.println("输入错误,请重新输入");
                        }

                    }
                case 2:
                    top2:while (true){

                        System.out.println("请输入你要查询的员工号:");
                        int temp = sc.nextInt();
                        int index = -1;
                        for (int i = 0; i < number.length; i++) {
                            if(number[i] == temp){
                                index = i;
                                break;
                            }
                        }
                        if(index == -1)
                            System.out.println("没有你输入的员工号");
                        else
                            System.out.println("员工号:" + number[index] + ",姓名:" + name[index]);
                        System.out.println("是否继续查询?输入1继续,输入2返回主页面");
                        while (true){
                            int temp2 = sc.nextInt();
                            if(temp == 1)
//                        返回whlie
                                continue top2;
                            else if( temp == 2)
                                continue top;
                            else
                                System.out.println("输入错误,请重新输入");
                        }

                    }
                case 3:
                    top3:while (true){
                        System.out.println("请输入你要修改的员工号:");
                        int temp = sc.nextInt();
                        int index = -1;
                        for (int i = 0; i < number.length; i++) {
                            if(number[i] == temp){
                                index = i;
                                break;
                            }
                        }
                        if(index == -1)
                            System.out.println("没有你输入的员工号");
                        else{
                            System.out.println("员工号:" + number[index] + ",姓名:" + name[index]);
                            System.out.println("请输入你要修改的员工号:");
                            name[index] = sc.next();
                        }

                        System.out.println("是否继续修改?输入1继续,输入2返回主页面");
                        while (true){
                            int temp2 = sc.nextInt();
                            if(temp == 1)
//                        返回whlie
                                continue top3;
                            else if( temp == 2)
                                continue top;
                            else
                                System.out.println("输入错误,请重新输入");
                        }
                    }
            }
        }
    }
}

总结

? ? ? ? 今天学习内容依然繁重,脑瓜依然超负荷使用。

? ? ? ? 三大排序和数组扩容很好的解决了数组的排序等问题。员工管理系统——这算是学习以来最难的、最综合的练习题,在同学的帮助下艰难完成了练习题。

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-07-21 21:45:58  更:2022-07-21 21:48:02 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 23:29:37-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码