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]+" "); } }}
复制代码
此时我只需将在课堂的同学的学号后两位,输入到 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 z; System.out.println("请输入n个需要排序的数:(请以 ,隔开)"); Scanner input=new Scanner(System.in); String a=input.nextLine(); String [] p=a.split(","); int []shu=new int[p.length];
for(int i=0;i<p.length;i++) { shu[i]=Integer.parseInt(p[i]);
} System.out.println("原序列为:"); for(int i=0;i<shu.length;i++) { System.out.printf("%4d",shu[i]); } System.out.printf("\n"); for(int i=1;i<=shu.length;i++) { for(int j=0;j<shu.length-1;j++) { if(shu[j]>shu[j+1]) { z=shu[j+1]; shu[j+1]=shu[j]; shu[j]=z; } } } System.out.println("排序后序列为:"); for(int i=0;i<shu.length;i++) { System.out.printf("%4d",shu[i]); } }}
复制代码
以上就是 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 <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");}
复制代码
评论