• Java 键盘输入n个数进行排序输出


    1、需求分析:

      在校大四学生,因为疫情原因集体推迟开学,我正好是班委,需要每天上课需要统计人数,总有一两个人不按时进入网课堂,又由于进入课堂时间有所不同每个人,即使同学们昵称改成了学号加姓名,仍然不能按学号顺序排序。

    在这里插入图片描述

    2、问提描述:

      有N个数字,需要进行大小排序。

    在这里插入图片描述

    3、编写代码:

    public class Test {
        public static void main(String[] args) {
            int [] array = {7,22,38,55,35};
            int temp;
            for (int i = 0; i < array.length; i++) {
                for (int j = i+1; j < array.length; j++) {
                    if (array[i] < array[j]) {
                        temp = array[i];
                        array[i] = array[j];
                        array[j] = temp; // 两个数交换位置
                    }
                }
            }
    
            for (int i = 0; i < array.length; i++) {
                System.out.print(array[i]+" ");
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    此时我只需将在课堂的同学的学号后两位,输入到 int [] array 数组里面即可快速找到没有进入课堂的同学。

    好比按有20人,当有这些学号的同学(2,3,5,1,8,4,11,20,15,17,16,14,6)进入课堂时,运行结果如下:

    在这里插入图片描述

    此时,我便可以清晰的看到有18,19,13,12,10,9,7 同学没有到课堂。

    4、代码优化:

    需求分析:

      虽然上面代码已经可以实现,但是我这种喜欢小黑框的爱好者,不希望直接定义个死数组,我希望通过键盘输入与电脑交互式完成需求。

    代码如下:

    import java.util.Scanner;
    public class Test1 {
        public static void main(String[]  args)
        {
            int x;
            System.out.println("请输入n个需要排序的数:(请以 ,隔开)");
            Scanner input=new Scanner(System.in);
            String  a = input.nextLine();
            String [] p = a.split(",");
            int []arr=new int[p.length];
    
            for(int i=0;i<p.length;i++) {
                arr[i]=Integer.parseInt(p[i]);
            }
    
            //原序列为
            System.out.println("原序列为:");
            for(int i=0;i<arr.length;i++) {
                System.out.printf("%4d",arr[i]);
            }
    
            System.out.printf("\n");
            for(int i=1;i<=arr.length;i++) {
                for(int j=0;j<arr.length-1;j++) {
                    if(arr[j]>arr[j+1]) {
                        x=arr[j+1];
                        arr[j+1]=arr[j];
                        arr[j]=x;
                    }
                }
            }
    
            //排序后序列
            System.out.println("排序后序列为:");
            for(int i=0;i<arr.length;i++) {
                System.out.printf("%4d",arr[i]);
            }
    
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41

    在这里插入图片描述

      以上就是 java 在键盘输入n个数进行排序输出的全部内容,主要还是 java 基础内容,for循环内容等。

    5、补充

    1、排序是什么?

      排序是计算机内经常进行的一种操作,其目的是将一组“无序”的记录序列调整为“有序”的记录序列。分内部排序和外部排序,若整个排序过程不需要访问外存便能完成,则称此类排序问题为内部排序。反之,若参加排序的记录数量很大,整个序列的排序过程不可能在内存中完成,则称此类排序问题为外部排序。内部排序的过程是一个逐步扩大记录的有序序列长度的过程。

      学习网站推荐:https://visualgo.net/zh

    2、八大排序算法是:
      1、直接插入排序;2、希尔排序;3、简单选择排序;4、堆排序;5、冒泡排序;6、快速排序;7、归并排序;8、桶排序/基数排序。

    • 冒泡排序:时间复杂度O(n^2) 空间复杂度O(1)稳定

    • 归并排序:时间复杂度O(nlogn) 空间复杂度O(nlogn) 稳定

    • 快速排序:时间复杂度O(nlogn) 空间复杂度O(logn) 不稳定

    • 桶排序: 时间复杂度O(n) 空间复杂度O(n) 稳定

    • 简单选择排序:时间复杂度 O(n^2) 空间复杂度O(1)不稳定

    • 直接插入排序:时间复杂度O(n^2) 空间复杂度O(1) 稳定的

    • 希尔排序:时间复杂度O(n^1.3~1.5) 空间复杂度O(1) 不稳定

    • 堆排序:时间复杂度O(nlogn) 空间复杂度O(1) 不稳定

    3、示例

    冒泡排序:

    #include 
    #define SIZE 8void bubble_sort(int a[], int n)
    {
        int i, j, temp;
        for (j = 0;j < n - 1;j++)
            for (i = 0;i < n - 1 - j;i++)
            {
                if(a[i] > a[i + 1])
                {
                    temp = a[i];
                    a[i] = a[i + 1];
                    a[i + 1] = temp;
                }
            }
    }
     
    int main()
    {
        int number[SIZE] = {95, 45, 15, 78, 84, 51, 24, 12};
        int i;
        bubble_sort(number, SIZE);
        for (i = 0; i < SIZE; i++)
        {
            printf("%d", number[i]);
        }
        printf("\n");
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
  • 相关阅读:
    js 时间加年月日
    Radius OTP完成堡垒机登录认证 安当加密
    vue项目发布
    项目实战——匹配系统(中)
    CV轻量级backbone模型小抄(1)
    Tensorflow Federated Framework 谷歌联邦学习框架
    【日常-bug】文件上传oss报错-跨域- ‘Access-Control-Allow-Origin
    61、SpringBoot -----跨域资源的设置----局部设置和全局设置
    [ 图 论 ]二分图判定及其匹配(基础+提高)
    React.memo()、useCallback()和useMemo()的用法--性能优化--缓存
  • 原文地址:https://blog.csdn.net/qq_53463544/article/details/126617567