java编程问题。用两个for循环来把输入的整数从小到大排序。

2025-03-18 06:04:12
推荐回答(3个)
回答1:

这样的代码看的费劲

数组排序的方法有冒泡和选择比较的好理解:

代码如下:

package com.tx.wl.p10;


public class ArrayDemo {

public static void main(String[] args) {

int[] a = { 3, 43, 22, 4, 22, 31, 23 };

System.out.println("遍历数组:");

showArray(a);

System.out.println("冒泡排序:");

maoPao(a);

showArray(a);

System.out.println("选择排序:");

xuanze(a);

showArray(a);

}


private static void xuanze(int[] a) {

int[] b = a;

for (int i = 0; i < b.length; i++) {

int index = i;

for (int j = i; j < b.length; j++) {

if (a[index] > b[j]) {

index = j;

}

}

int temp = b[index];

b[index] = b[i];

b[i] = temp;

}


}


private static void maoPao(int[] a) {

int[] c = a;

for (int i = 0; i < c.length; i++) {

for (int j = 0; j < c.length - i - 1; j++) {

if (c[j] > c[j + 1]) {

int temp = c[j];

c[j] = c[j + 1];

c[j + 1] = temp;

}

}

}

}


private static void showArray(int[] a) {

for (int aa : a) {

System.out.print(aa + " ");

}

System.out.println();

}

}

理解型记忆,里面的遍历用的是增强for,原理就相当于

for(int i=0; i

System.ou.tprintln(a[i]);

}

回答2:

我用 3,1,5,4,2做了一下测试,把每次内循环后(外循环的一次)的数组打出来如下:
5 1 3 4 2
1 5 3 4 2
1 3 5 4 2
1 3 4 5 2
1 2 3 4 5
这个排序看起来有点反人类,好像第一次循环的时候把大的往前面放,其实意思综合起来就一句话:外循环的下标i到哪个数,就保证前i个数是有序的。
解释一下吧:
i=0的时候把最大的数放在z[0]
i=1的时候,z[0]肯定比z[1]大,互换;后面的数都比不上换过的z[1],所以前2个是有序的。
在i=k时,前k个数是有序的,即z[0...k-1]有序,那么对于z[k]来排序(此时i=k),n从0开始(即从前面开始),如果n下标的元素大,则互换;如果小,则不换。此时n在i之前,所以保证了大的数一定扔到了后面;那么内循环中n自增时,前n个数一定是排好序的,直到n=i(即k),那么前k+1个数也就是有序的。而由于n超过i之后,a[i]变成了原来的a[k-1],一定是数组中最大的数,因此后面的数都比不过它,也就不会再进行交换了。所以在这次外循环中,前k+1个数变成了有序的。
由数学归纳法,最后一定会把所有的数进行排序。
不懂请追问。喜欢就请采纳吧~

回答3:

这是双循环,先执行外面一层再执行里面一层,共执行25次,if里面的语句是先取z[i]和z[n]比;那么i=0时循环就是z[0]z[0]z[0]z[0]z[0]这样排序就是拿出一个数和其他数字比,只要比其他数字大就进行排序,但是你这个排序方法有点奇葩,直接多声明一个变量用来装数组里的值然后对调数据不就可以了么,你为什么要这样又加又减?