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

java编程问题。用两个for循环来把输入的整数从小到大排序。但是我没看懂为什么是z[i]<z[n],这样不就是从大到小排序吗?计算机中应该怎样执行的这一段?

这样的代码看的费劲

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

代码如下:

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<a.length;i++){

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

}

温馨提示:内容为网友见解,仅供参考
第1个回答  2017-04-14
我用 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个数变成了有序的。
由数学归纳法,最后一定会把所有的数进行排序。
不懂请追问。喜欢就请采纳吧~本回答被提问者采纳
第2个回答  2017-04-14
这是双循环,先执行外面一层再执行里面一层,共执行25次,if里面的语句是先取z[i]和z[n]比;那么i=0时循环就是z[0]<z[0] i=1时循环就是z[1]<z[0] 第三遍第四遍以此类推
z[0]<z[1] z[1]<z[1]
z[0]<z[2] z[1]<z[2]
z[0]<z[3] z[1]<z[3]
z[0]<z[4] z[1]<z[4]
这样排序就是拿出一个数和其他数字比,只要比其他数字大就进行排序,但是你这个排序方法有点奇葩,直接多声明一个变量用来装数组里的值然后对调数据不就可以了么,你为什么要这样又加又减?

...用两个for循环来把输入的整数从小到大排序。
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...

在java中,从键盘上输入10个整数.并从小到大的顺序输出
System.out.print("请输入第"+(i+1)+"个数:");a[i] = sc.nextInt();} System.out.println();System.out.println("排序前:");for(int i=0; i<10; i++){ System.out.print(a[i]+" ");} System.out.println();\/\/排序核心代码 for(int i=0; i<10; i++){ for(int j...

用java语言编程:从键盘输入30个整数,然后进行排序(按从小到大...
public static void main(String[] args) { int num[] = new int[30];Scanner scanner = new Scanner(System.in);for (int i = 0; i < num.length; i++) { num[i]= scanner.nextInt(); \/\/读取30个数存进num } Arrays.sort(num);\/\/对num数组进行排序 System.out.println(Arrays....

输入四个整数,要求按从小到的顺序输出。(用for语句)麻烦了
import java.io.InputStreamReader;public class Test { public static void main(String args[]) { System.out.println("请输入三个数,使用','分隔:");BufferedReader br = new BufferedReader(new InputStreamReader(System.in));try { String tempString = "";while (null != (tempString =...

java:输入五个数,输出最大最小值
import java.util.Scanner;class gt { public static void main(String[] args) { \/\/ TODO Auto-generated method stub Scanner input=new Scanner(System.in);int[] a=new int[5];int max=0,min=0;System.out.print("输入五个整数:");for(int i = 0 ;i<5;i++){ a[i]=input....

...输出他的转置,比如输入12345,输出就为54321,要求使用for循环...
public static void main(String[] args) {Scanner in =new Scanner(System.in);System.out.println("请输入正整数!");String aa=in.next();String [] b=aa.split("");String [] bb=new String[]{};List<String> list=new ArrayList<String>();for (int i = 0; i < b.length; ...

java编写应用程序,输入 10个整数,然后按从小到大的顺序输出大神们帮帮...
public static void main(String[] args) { Scanner input = new Scanner(System.in);\/\/创建Scanner对象 int[] arrayInt = new int[10];\/\/声明一个数组 长度为10 for (int i = 0; i < arrayInt.length; i++) { \/\/循环输入数字,放入arrayInt数组 System.out.print("请输入数字:"); ...

1*2*3*4*5*n用java编程怎么用for循环来写
for(int i=1;i<=n;i++){ int sum=1;sum=sum*i } System.out.println("sun="+sum);

怎样使用java编程对产生的随机数:1~n 进行由小到大排序啊?
} \/\/ 排序 Arrays.sort(number); \/\/ 输出 for(int i:number){ System.out.print(i + " "); } } public static void main(String[] args) { \/\/ TODO Auto-generated method stub new Sort(); }}这里我只设定了数组大小为10,如果大小不满意,可以手动...

输入三个整数x,y,z,请把这三个数由小到大输出:用JAVA语言编程
题目:输入三个整数x,y,z,请把这三个数由小到大输出。1.程序分析:我们想办法把最小的数放到x上,先将x与y进行比较,如果x>y则将x与y的值进行交换,然后再用x与z进行比较,如果x>z则将x与z的值进行交换,这样能使x最小。2.程序源代码:main(){ int x,y,z,t;scanf("%d%d%d",&x...

相似回答