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/07/15 学习笔记 (day08)简易算法(排序算法) -> 正文阅读

[数据结构与算法]2022/07/15 学习笔记 (day08)简易算法(排序算法)

一.简易算法

????????排序算法:
?????????* 1.冒泡排序
?????????* 2.快速排序
?????????* 3.插入排序
?????????* 4.选择排序
?????????* 5.希尔排序
?????????* 6.堆排序
?????????* 7.归并排序
?????????* 8.桶排序

?1.冒泡排序法:

????????冒泡排序(Bubble Sort)是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。

????????原理:每一次排序 ,前后比较 ,元素互换 ,找出最大(最小)值

???????????????????j < arr.length - i - 1 ; j++? ? ? ? ??

?

代码如下:

package homework;
import java.util.Arrays;
    public class Test07 {
        public static void main(String[] args) {
            //排序
            //冒泡排序
            int[] arr={3,1,6,9,7,2,8,4,5};
            int[] arrSort=sort(arr);
            //int[] arr={1,2,3,4,5,6,7,8,9};
            System.out.println("冒泡排序之后结果是:"+Arrays.toString(arrSort));
        }
            // 冒泡排序
            // int【】 排好序 int[] arr 没排序
            public static int[] sort(int[] arr){
            int count=0;
            for(int i=0;i<arr.length-1;i++){
                for(int j=0;j<arr.length-i-1;j++){
                    //交换判断条件
                        if(arr[j]>arr[j+1]){
                        //相隔两数交换位置
                        int temp=arr[j];
                        arr[j]=arr[j+1];
                        arr[j+1]=temp;
                }
        count++;
            }
        }
        System.out.println("循环了多少次"+count+"次");
        
        return arr;
    }
}

?优化时,加上boolean变量判断是否有交换,如没有,结束排序操作,提高效率

package homework;
import java.util.Arrays;
// 优化 冒泡排序
    public class Test08 {
    //冒泡排序的方法
    // int[] arr 要排序原数组
    // n 表示数组的长度
        public static int[] sort(int[] arr,int n){
        //如果长度小于1 ,不是数组,跳出方法
        boolean flag=false;//提前退出冒泡循环标识位
        for(int i=0;i<n-1;i++){
        for(int j=0;j<n-i-1;j++){
        if(arr[j]>arr[j+1]){//表示交换
            int temp=arr[j];
            arr[j]=arr[j+1];
            arr[j+1]=temp;
            flag=true;
        }
    }
        if(!flag) break;//没有数据交换提前推出
    }
    return arr;
}
public static void main(String[] args) {
    int[] arr={3,1,6,9,7,2,8,4,5};//9
    int[] arrNew=sort(arr,9);
    System.out.println("冒泡排充之后"+ Arrays.toString(arrNew));
    }
}

?冒泡排序的优点:每进行一趟排序,就会少比较一次,因为每进行一趟排序都会找出一个较大值。

?2.插入排序:

?

?如图所示:从第一个元素开始,该元素可以认为已经被排序,取下一个元素a,从已排序的元素序列从后往前扫描,如果该元素大于a,则将该元素移到下一位,重复该步骤,直到找到已排序元素中小于等于a的元素,a插入到该元素的后面,如果已排序所有元素都大于a,则将a插入到下标为0的位置,然后重复上述步骤。

3.选择排序:


?如图所示:

第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。

以此类推,直到全部待排序的数据元素的个数为零。

????????今日习题:?

????????员工管理系统:
? ? ? ? ? ? ? ? ? ? 员工信息要保存到数组里。
? ? ? ? ? ? ? ? ? ? 1.工号(不能输入,自动生成的自动递增的一个数字1001)
? ? ? ? ? ? ? ? ? ? 2.员工姓名
? ? ? ? ? ? ? ? ? ? 员工的工号和姓名都是保存到数组里
? ? ? ? ? ? ? ? ? ? int [] nos = new int[2];
? ? ? ? ? ? ? ? ? ? String [] names = new String[2];
? ? ? ? ? ? ? ? ? ? 要考虑扩容问题
? ? ? ? ? ??
? ? ? ? ? ? ? ? ? ? 根据工号查询
? ? ? ? ? ? ? ? ? ? 如果有能力的同学。可以去做根据姓名查询,姓名可以重名(选做)
? ? ? ? ? ? ? ? ? ? 排序,根据工号从大到小排序


? ? ? ? ? ? ? ? ? ? 修改两个操作:
? ? ? ? ? ? ? ? ? ? 先输入员工号,先查询员工号在不在,如果不在,
? ? ? ? ? ? ? ? ? ? 员工号输入有误,
? ? ? ? ? ? ? ? ? ? 如果在,先显示出原有信息,请输入新的名字,
? ? ? ? ? ? ? ? ? ? 修改信息。
? ? ? ? ? ? ? ? ? ? 数组删除元素;

方法1:?

package work;

import java.util.Scanner;

public class ManageSystem {
    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("请选择你要查询的类型序号:\n1:通过员工号查询\n2:查询全部");
                        String temp_1 = in.next();
                        if (temp_1.equals("2")) {
                            System.out.println("工号    姓名      爱好");
                            for (int i = 0; i < employeeNum; i++) {
                                for (int j = 0; j < 3; j++) {
                                    System.out.print(employeeData[i][j] + "   ");
                                }
                                System.out.println();
                            }
                            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;
                        } 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("没有此员工号的员工,输入 1 重新查询,输入 2 回到主页面,输入其它退出系统!");
                            String temp = in.next();
                            if (temp.equals("1"))
                                continue top2;
                            else 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("没有此员工号的员工,输入 1 继续修改,输入 2 回到主页面,输入其它退出系统!");
                        String temp = in.next();
                        if (temp.equals("2"))
                            continue top;
                        else if (temp.equals("1"))
                            continue top3;
                        break top;
                    }

                case "4":
                    top4:
                    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("确认删除吗(输入”y“或者”y“删除,输入其他返回主页面)?");
                                String temp_2 = in.next();
                                if (temp_2.equals("Y") || temp_2.equals("y")) {
                                    while (i <= employeeNum - 1) {
                                        employeeData[i][0] = employeeData[i + 1][0];
                                        employeeData[i][1] = employeeData[i + 1][1];
                                        employeeData[i][2] = employeeData[i + 1][2];
                                        i++;
                                    }
                                    employeeNum--;
                                } else
                                    continue top;
                                System.out.println("修改成功!\n是否继续删除?(输入 1 继续删除,输入 2 回到主页面," +
                                        "输入其它退出系统!)");
                                String temp = in.next();
                                if (temp.equals("1"))
                                    continue top4;
                                else if (temp.equals("2"))
                                    continue top;
                                break top;
                            }
                        }
                        System.out.println("没有此员工号的员工,输入 1 重新输入,输入 2 回到主页面,输入其它退出系统!");
                    }
                case "0":
                    break top;
                default:
                    System.out.println("你输入的信息错误,请重新输入。");
            }
        }
        System.out.println("谢谢使用员工管理系统,再见!!!");
    }
}

方法2:

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

public class ManageSystem {

	public static void main(String[] args){
		System.out.println("欢迎使用员工管理系统!");
		Scanner sc = new Scanner(System.in);
			
		int[] nos = new int[2];				//用于存放员工号
		String[] names = new String[2];		//用于存放员工姓名
		int noCount = 1000;					//员工编号
		int empSum = 0;						//员工人数
		boolean isAdd = false;				//是否继续添加
	
		while(true) {
				System.out.println("请选择功能:1.添加员工 2.查询员工 3.修改员工 4.删除员工");
				int flag = sc.nextInt();
				switch (flag) {
					case 1:
						//添加
						isAdd = true;
						while(isAdd) {
							System.out.print("请输入员工姓名:");
							String name = sc.next();

							//超出扩容,一次扩容2个单位
							if(empSum >= nos.length) {
								int[] new_nos = new int[nos.length + 2];
								String[] new_names = new String[names.length + 2];

								for(int i=0; i<nos.length; i++) {
									new_nos[i] = nos[i];
									new_names[i] = names[i];
								}
								nos = new_nos;
								names = new_names;
							} 
							
							//赋值并更新
							nos[empSum] = ++noCount;	
							names[empSum++] = name;
						
							System.out.println("你已添加成功!");
							System.out.println("是否继续添加?(true/false):");
							isAdd = sc.nextBoolean();
						}			
						break;
					case 2:
						/*
							要求根据工号查询 

						*/
						boolean isFindAll = false;
						System.out.print("查询所有员工true;查询单个员工false:");
						isFindAll = sc.nextBoolean();
						if(isFindAll) {
							//查询所有员工
							if(names[0] == null) {System.out.println("没有任何员工"); break;}
							for(int i=0; i<nos.length; i++) {
								System.out.println("员工编号:" + nos[i] + "\t员工姓名:" + names[i]);
							}
						} else {
							System.out.print("请输入你想查询的员工工号:");
							int empNo = sc.nextInt();
							boolean isFound = false;
							for (int i=0 ;i<nos.length ; i++) {
								if(empNo == nos[i]) {
									System.out.println("员工编号:" + nos[i] + "\t员工姓名:" + names[i]);
									isFound = true;
									break;
								} 
							}
							System.out.print(isFound ? "" : "未找到该员工\n");
						}
						
						break;

					case 3:
						//修改
						System.out.print("请输入你想修改的员工工号:");
						int empNo1 = sc.nextInt();
						boolean isFound1 = false;
						for (int i=0 ;i<nos.length ; i++) {
							if(empNo1 == nos[i]) {
								//显示原有信息
								System.out.println("员工编号:" + nos[i] + "\t员工姓名:" + names[i]);
								isFound1 = true;
								System.out.print("请输入新名字:");
								String new_name = sc.next();
								//更新新名字
								names[i] = new_name;
								System.out.println("修改成功!修改结果如下");
								System.out.println("员工编号:" + nos[i] + "\t员工姓名:" + names[i]);

								break;
							} 
						}
						System.out.print(isFound1 ? "" : "员工号有误\n");


						break;

					case 4:
						//删除
						System.out.print("请输入你想删除的员工工号:");
						int empNo2 = sc.nextInt();
						boolean isFound2 = false;
						for (int i=0 ;i<nos.length ; i++) {
							if(empNo2 == nos[i]) {
								//显示原有信息
								System.out.println("员工编号:" + nos[i] + "\t员工姓名:" + names[i]);
								isFound2 = true;
								System.out.print("是否确认删除该员工?(true/false):");
								boolean isDel = sc.nextBoolean();
								if(isDel) {//删除
									for(int j=i; j<nos.length; j++){
										if(j == nos.length-1) break;
										//位移
										nos[j] = nos[j+1];
										names[j] = names[j+1];
									}
									//更新员工数量
									empSum--;
									System.out.println("删除成功!");
								} else {
									System.out.println("已取消删除操作!");
									
								}
								break;
							} 
							System.out.print(isFound2 ? "" : "你要删除的员工并不存在!\n");
						}
						
						break;
					default:
					
						System.out.println("无效数值,请重新选择");
						break;
						
			
			}
		}
	}
}

?

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-07-20 19:09:52  更:2022-07-20 19:13:00 
 
开发: 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年12日历 -2024/12/29 9:17:06-

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