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

127 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第30天,点击查看活动详情

1、需求分析:

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

image-20220831094432501.png

2、问提描述:

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

image-20220831094412981.png

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]+" ");
        }
    }
}

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

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

image-20220831093459395.png

此时,我便可以清晰的看到有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]);
        }

    }
}

image-20220831094003725.png

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

5、补充

1、排序是什么?

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

  学习网站推荐: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 <stdio.h>
#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");
}