需要能够选择数组出现的方式,有自行输入和随机数自动生成。但是运行的自行输入的有bug,然后排序结果的只有第一个排序有过程。求指教。
import java.util.*;
public class chap02 {
public static void main(String[]args) {
System.out.println("请输入你要进行排序的数字个数:");
Scanner input1=new Scanner(System.in);
Scanner in=new Scanner(System.in);
int num =input1.nextInt();
int[]a=new int[num];
int s=in.nextInt();
if(s==1) {
Scanner inp=new Scanner(System.in);
for(int i=0;i<a.length;i++) {
a[i]=inp.nextInt();
}
}else {
int k=0;
while(k<=num-1) {
int t=(int)(Math.random()*1000);
boolean b=false;
for(int i=0;i<a.length;i++) {
if(t==a[i]){
b=true;
}
}
if(b!=true) {
a[k]=t;
k++;
}
}
input1.close();
int[]templist=a;
System.out.println("初始状态"+Arrays.toString(a)+"下面进行插入排序");
int[]b=InserSort(a);
System.out.println("经过插入排序后的最终状态"+Arrays.toString(b));
a=templist;
System.out.println("\n\n初始状态"+Arrays.toString(a)+"下面进行冒泡排序");
int []c=BubbleSort(a);
System.out.println("经过冒泡排序后最终状态"+Arrays.toString(c));
a=templist;
System.out.println("\n\n初始状态"+Arrays.toString(a)+"下面进行选择排序");
int []d=SelectionSort(a);
System.out.println("经过选择排序后最终状态"+Arrays.toString(d));
}
}
public static int[]InserSort(int []a){
int i,j,num=0;
for(i=1;i<a.length;i++) {
for(j=0;j<=i;j++) {
if(a[i]<a[j]) {
int temp=a[i];
for(int k=i;k>j;k--) {
a[k]=a[k-1];
}
a[j]=temp;
}
}
System.out.println("第"+(++num)+"趟排序"+Arrays.toString(a));
}
return a;
}
public static int[]BubbleSort(int []a){
int i,j,num=0;
for (i =a.length -1; i >0 ; i--) { // 比较顺序 第一遍:找出最小值给索引为9的数组
for (j = 0; j < i; j++) {
if(a[j] > a[j+1]){ //当前面的索引小于后面的索引,把两个数据值调换
int temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
}
}
System.out.println("第"+(++num)+"趟排序"+Arrays.toString(a));
}
return a;
}
public static int[]SelectionSort(int[]a){
int i,j,num=0;
for(i=0;i<a.length;i++) {
for(j=i+1;j<a.length;j++) {
if(a[i]>a[j]) {
int temp=a[i];
a[i]=a[j];
a[j]=temp;
}
}
System.out.println("第"+(++num)+"趟排序"+Arrays.toString(a));
}
return a;
}
}
import java.util.*;
public class chap02 {
public static void main(String[]args) {
System.out.println("请输入你要进行排序的数字个数:");
Scanner input1 = new Scanner(System.in);
int num =input1.nextInt();
System.out.println("请选择数组出现的方式 1.手动输入 2.随机生成:");
Scanner in = new Scanner(System.in);
int s=in.nextInt();
int[] a=new int[num];
if(s==1) {
System.out.println("请输入"+num+"个需要排序的整数:");
Scanner inp=new Scanner(System.in);
for(int i=0;i<a.length;i++) {
a[i]=inp.nextInt();
}
inp.close();
}else if(s == 2) {
int k = 0;
while (k <= num - 1) {
int t = (int) (Math.random() * 1000);
boolean b = false;
for (int i = 0; i < a.length; i++) {
if (t == a[i]) {
b = true;
}
}
if (b != true) {
a[k] = t;
k++;
}
}
} else{
System.out.println("让你选择1或2你不懂吗?!!");
return ;
}
in.close();
input1.close();
int [] templist1 = a.clone();
System.out.println("初始状态"+Arrays.toString(a)+"下面进行插入排序");
int[] b = InserSort(templist1);
System.out.println("经过插入排序后的最终状态"+Arrays.toString(b));
int [] templist2 = a.clone();
System.out.println("\n\n初始状态"+Arrays.toString(a)+"下面进行冒泡排序");
int []c=BubbleSort(templist2);
System.out.println("经过冒泡排序后最终状态"+Arrays.toString(c));
int [] templist3 = a.clone();
System.out.println("\n\n初始状态"+Arrays.toString(a)+"下面进行选择排序");
int []d=SelectionSort(templist3);
System.out.println("经过选择排序后最终状态"+Arrays.toString(d));
}
public static int[]InserSort(int []a){
int i,j,num=0;
for(i=1;i<a.length;i++) {
for(j=0;j<=i;j++) {
if(a[i]<a[j]) {
int temp=a[i];
for(int k=i;k>j;k--) {
a[k]=a[k-1];
}
a[j]=temp;
}
}
System.out.println("第"+(++num)+"趟排序"+Arrays.toString(a));
}
return a;
}
public static int[]BubbleSort(int []a){
int i,j,num=0;
for (i =a.length -1; i >0 ; i--) { // 比较顺序 第一遍:找出最小值给索引为9的数组
for (j = 0; j < i; j++) {
if(a[j] > a[j+1]){ //当前面的索引小于后面的索引,把两个数据值调换
int temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
}
}
System.out.println("第"+(++num)+"趟排序"+Arrays.toString(a));
}
return a;
}
public static int[]SelectionSort(int[]a){
int i,j,num=0;
for(i=0;i<a.length;i++) {
for(j=i+1;j<a.length;j++) {
if(a[i]>a[j]) {
int temp=a[i];
a[i]=a[j];
a[j]=temp;
}
}
System.out.println("第"+(++num)+"趟排序"+Arrays.toString(a));
}
return a;
}
}
初学不建议玩的太复杂,容易晕。
我也有几篇现成的排序代码:https://blog.csdn.net/qq_37284843/article/details/122529246
首先scanner是资源型的工具类,占用系统资源,不用实例化多个对象,用完要调用关闭,其次,这个类有很多bug,压根就不推荐用,我记得没错的话你要读就调用他nextLine这个方法,然后用包装类再转换成你需要的类型,如Interger下转换成整形的方法等,你这代码看得我没看完就开始哔哔了