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");
}
复制代码
评论