冒泡排序算法
import java.util.Scanner;
public class exercise3 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int a[] = new int[n];
for(int i=0; i<n; i++){
a[i] = sc.nextInt();
}
for(int i=0; i<n; i++){
System.out.print(a[i]+'\t');
}
//从小到大排序
for(int i=0; i<n-1; i++){
for(int j=i; j<n-i; j++){
if(a[i]>a[i+1]){
int A = a[i];
a[i] = a[i+1];
a[i+1] = A;
}
}
}
for(int i=0; i<n; i++){
System.out.print(a[i]+'\t');
}
}
}
5
1 2 3 5 4
10111214131011121413
这里先不讨论算法正确与否,但是数组赋值那里总会复制不成功,
得到正确的赋值结果
1、数组赋值那里没问题,问题出在打印System.out.print(a[i]+'\t');这里,print是打印不换行,a[i]+'\t'是数字加字符会自动将字符转换为ASSIC码对应的值,这里'\t'对应的是9,所以a[i]+'\t'是一个加法计算结果是a[i]+9,并不是a[i]+空格。
2、要实现a[i]+空格的打印应该是System.out.print(a[i]+"\t"); a[i]+"\t"相当于数字加字符串会自动将数组转换为字符串。
3、冒泡排序有点问题,内循环应该是j < n,要不最后一个数不会进行排序。修改之后的代码如下:
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int a[] = new int[n];
for (int i = 0; i < n; i++) {
a[i] = sc.nextInt();
}
for (int i = 0; i < n; i++) {
System.out.print(a[i]+"\t");
}
System.out.println();
//从小到大排序
for (int i = 0; i < n - 1; i++) {
for (int j = i; j < n; j++) {
if (a[i] > a[i + 1]) {
int A = a[i];
a[i] = a[i + 1];
a[i + 1] = A;
}
}
}
for (int i = 0; i < n; i++) {
System.out.print(a[i]+"\t");
}
}
package com;
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int a[] = new int[n];
for (int i = 0; i < n; i++) {
a[i] = sc.nextInt();
}
System.out.println("排序前:" + Arrays.toString(a));
// 从小到大排序
for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < n - i - 1; j++) {
if (a[j] > a[j + 1]) {
int A = a[j];
a[j] = a[j + 1];
a[j + 1] = A;
}
}
}
System.out.println("排序后:" + Arrays.toString(a));
sc.close();
}
}