JAVA数组,查找,排序

JAVA数组,查找,排序

数组:

基本的数据结构,线性表(数据元素之间的关系是一对一的关系)

数组反转:Array;

        int a[]={1,4,6,8,2};
        for (int i = 0; i < Math.sqrt(a.length); i++) {
            int j=i,k=a.length-i-1;
            int t=a[j];
            a[j]=a[k];
            a[k]=t;
        }

//        Collections.reverse(Arrays.asList(a));
        for (int i : a) {
            System.out.print(i+" ");
        }

数组扩容:

public static void main(String[] args) {
    int [] a=  new int []{  1 ,  2 ,  3 };
    int [] t=  new int [  6 ];
    for (  int i =   0 ; i < a.length; i++) {
        t[i]=a[i];
    }
    a=t;
    for (  int i : a) {
        System.out.print(i+  " " );
    }
}

  

 

程序思路:

1.先完成需求功能

2.根据程序运行结果进行优化处理

3.代码重构

4.提升效率

 

查找:

线性查找:

折半查找(需要数据基本有序):

折半查找
//二分法
//        int [] arr=new int[]{1,3,5,7,10,11};
//        Scanner sc=new Scanner(System.in);
//        int a=sc.nextInt();
//        int f=0,en=arr.length-1;
//        if(a<arr[f]||a>arr[en]){
//            System.out.println("no");
//        }else{
//            while(f<=en){
//                int s=(f+en)/2;
//                if(a>arr[s]){
//                    f=(f+en)/2+1;
//                }else  if(a<arr[s]){
//                    en=(f+en)/2-1;
//                }else if(a==arr[s]){
//                    System.out.println(a+" "+s);
//                    break;
//                }
//            }
//        }

 

排序:Arrays.sort(arr);

冒泡排序:

public static void main(String[] args) {
        int arr[]=  new int []{  1 ,  5 ,  3 ,  90 ,  4 ,  3 ,  2 ,  66 };
        maopao(arr ,arr.length);
    }
    static void maopao(  int a[],  int n){
        //冒泡1
//        for (int i = 0; i < a.length; i++) {
//            for (int j=0;j<a.length-i-1;j++){                ="" if(a[j]="">a[j+1]){
//                    int t=a[j];
//                    a[j]=a[j+1];
//                    a[j+1]=t;
//                }
//            }
//        }
        //冒泡2
        int ex=n;
        while (ex!=  0 ){
            int b=ex;ex=  0 ;
            for (  int i =   0 ; i < b-  1 ; i++) {
                if (a[i]>a[i+  1 ]){
                    int t=a[i];
                    a[i]=a[i+  1 ];
                    a[i+  1 ]=t;
                    ex=i+  1 ;
                }
            }

        }

        for (  int i =   0 ; i < a.length; i++) {
            System.out.print(a[i]+  " " );
        }
    }</a.length-i-1;j++){>

  

选择排序:

    public static void main(String[] args) {
        int arr[]=  new int []{  1 ,  5 ,  3 ,  90 ,  4 ,  3 ,  2 ,  66 };
        System.out.println();
        xuanze(arr ,arr.length);
        for (  int i :arr) {
            System.out.print(i+  " " );
        }
    }
//选择排序
    static void xuanze(  int a[] ,  int n){
        for (  int i=  0 ;i

  

插入排序:

    public static void main(String[] args) {
        int arr[]=  new int []{  1 ,  5 ,  3 ,  90 ,  4 ,  3 ,  2 ,  66 };
        //maopao(arr ,arr.length);
        System.out.println();
        //xuanze(arr ,arr.length);
        insert(arr,arr.length);
        for (  int i :arr) {
            System.out.print(i+  " " );
        }
    }
//插入排序
    static void insert(  int a[],  int n){
        int j;
        for (  int i =   1 ; i < n; i++) {
                int t=a[i];
                for ( j=i-  1 ;t

  

 案例:简易系统

 

package shuzu;

import java.util.Scanner;

public class Zuoye_1 {

    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        System.out.println("欢迎使用系统");
//        System.out.println("请选择功能:1添加员工,2,查询员工,3修改员工,4删除员工");
//        String flag=sc.next();
        int [] nos=new int[2];
        String []  names=new String[2];
        int i=0;
        exitx: while (true){
            System.out.println("---------------------");
            System.out.println("请选择功能:1添加员工,2,查询员工,3修改员工,4删除员工,5查询总员工,6退出系统");
            System.out.println("---------------------");
            System.out.println();
            String flag=sc.next();
            switch (flag){
///////////////////添加
///////////////////员工信息保存数组,工号不能输入,自动生成递增,员工姓名 ,考虑扩容问题
                case "1":
                    if(i==nos.length){
                        //数组扩容
                        int[] noskuos=new int[nos.length+1];
                        for (int nosnum = 0; nosnum < nos.length; nosnum++) {
                            noskuos[nosnum]=nos[nosnum];
                        }
                        nos=noskuos;
                        //字符串扩容
                        String[] nameskuo=new String[names.length+1];
                        for (int name1=0;name1<names.length;name1++){
                            nameskuo[name1]=names[name1];
                        }
                        names=nameskuo;
                    }
                    System.out.println("请输入员工姓名");
                    String name=sc.next();
                    names[i]=name;
                    nos[i]=i+1;
                    i++;

                    //判断扩容

                    System.out.println("添加成功");
                    break;
//////////////////根据姓名(姓名可以重名),工号查询,二分查找
//////////////////子菜单,排序,根据工号倒序
                case "2":
                    System.out.println("员工工号   员工姓名");
                    System.out.println("1按id查看,2按姓名查看,3倒序查看员工");
                    String  selsectin=sc.next();
                    switch (selsectin){
                        case "1":
                            System.out.println("请输入要查询的员工号");
                            String sel_1;
                            cun_2:if(sc.hasNextInt()){
                                boolean cun_1=false;
                                sel_1=sc.next();
                                int ghid=Integer.parseInt(sel_1);
                                int first=0,ends=nos.length-1;
                                while(first<=ends){
                                    int s=(first+ends)/2;
                                    if(ghid>nos[s]){
                                        first=(first+ends)/2+1;
                                    }else  if(ghid<nos[s]){
                                        ends=(first+ends)/2-1;
                                    }else if(ghid==nos[s]){
                                        cun_1=true;
                                        System.out.print(nos[s]+"      "+names[s]+"\n");
                                        break cun_2;
                                    }
                                }
                                if(cun_1==false)
                                    System.out.println("查无此人");

                            }else{
                                System.out.println("输入错误");
                            }
                            break;
                        case "2":
                            System.out.println("请输入要查询的员工姓名");
                            String namese_1=sc.next();
                            boolean cunname=false;
                            for (int na=0;na<names.length;na++){
                                if(names[na].equals(namese_1)){
                                    cunname=true;
                                    System.out.print(nos[na]+"      "+names[na]+"\n");
                                }
                            }
                            if(cunname==false)
                                System.out.println("查无此人");
                            break;
                        case "3":
                            System.out.println("员工工号   员工姓名");
                            if(nos[0]==0){//没有数据
                                System.out.println("无");
                            }else {
                                p:for (int j = nos.length-1; j >=0 ; j--) {
                                    if(nos[j]==0)
                                        continue p;
                                    System.out.print(nos[j]+"            "+names[j]+"\n");

                                }
                            }
                            break;
                        default:
                            System.out.println("输入错误");break;
                    }
                    break;
//////////////////////////修改,输入员工号,更改员工名,确认在不在
                case "3":
                    if(nos[0]==0){
                                System.out.println("没有可修改的员工");
                    }else
                    {
                                System.out.println("请输入要修改的员工的员工号");
                                String changes;
                                if(sc.hasNextInt()){
                                        //确认员工是否存在
                                        changes=sc.next();
                                        int change=Integer.parseInt (changes);
                                        boolean exis=false;
                                        for (int ex=0;ex<nos.length;ex++) {
                                                if (change == nos[ex]) {
                                                    exis=true;
                                                } else if (change == 0) {
                                                    exis=false;
                                                }
                                        }
                                        if(exis){
                                                System.out.println("请输入要修改的姓名");
                                                String changename = sc.next();
                                                names[change - 1] = changename;
                                                System.out.println("修改成功");
                                        }else{
                                                System.out.println("员工不存在");
                                        }
                                }else {
                                            System.out.println("输入错误");
                                }

                    }
                    break;
//////////////////////////////////删除
                case "4":
                    if(nos[0]==0){
                        System.out.println("没有可删除的员工");
                    }else
                    {
                        System.out.println("请输入删除员工的工号");
                        String del;
                        if(sc.hasNextInt()){
                            //确认员工是否存在
                            del=sc.next();
                            int change=Integer.parseInt (del);
                            boolean exdel=false;
                            for (int ex=0;ex<nos.length;ex++) {
                                if (change == nos[ex]) {
                                    exdel=true;
                                } else if (change == 0) {
                                    exdel=false;
                                }
                            }
                            if(exdel){
                                System.out.println("请输入要删除的姓名");
                                changenos:for(int de=change;de<nos.length;de++){
//                                    if(nos[de]==0)
//                                        break changenos;
                                    nos[de-1]=nos[de];
                                }
                                nos[nos.length-1]=0;
                                changenames: for(int de=change;de<names.length;de++){
//                                    if(names[de]==null)
//                                        break changenames;
                                    names[de-1]=names[de];
                                }
                                names[names.length-1]=null;
                                System.out.println("删除成功");
                            }else{
                                System.out.println("员工不存在");
                            }
                        }else {
                            System.out.println("输入错误");
                        }

                    }
                    break;
//////////////////全体员工
                case "5":
                    System.out.println("员工工号   员工姓名");
                    System.out.println("-----------------------");
                    if(nos[0]==0){//没有数据
                        System.out.println("无");
                    }else {
                        p:for (int j = 0; j < nos.length; j++) {
                            if(nos[j]==0)
                                break p;
                            System.out.print(nos[j]+"            "+names[j]+"\n");

                        }
                    }
                    break;
                default:
                    System.out.println("输入错误");break;
/////////////////////退出系统
                case "6":
                    break  exitx;

            }
        }



    }
}

 

  

 

posted @ 2022-07-15 11:31  一只神秘的猫  阅读(39)  评论(0)    收藏  举报