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

java编程问题。用两个for循环来把输入的整数从小到大排序。但是我没看懂为什么是z[i]<z[n],这样不就是从大到小排序吗?计算机中应该怎样执行的这一段?... java编程问题。用两个for循环来把输入的整数从小到大排序。但是我没看懂为什么是z[i]<z[n],这样不就是从大到小排序吗?计算机中应该怎样执行的这一段? 展开
 我来答
来宾你好闯天涯
2017-04-14 · TA获得超过3876个赞
知道大有可为答主
回答量:4086
采纳率:64%
帮助的人:770万
展开全部

这样的代码看的费劲

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

代码如下:

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]);

}

无声的硝烟
2017-04-14 · TA获得超过593个赞
知道小有建树答主
回答量:360
采纳率:77%
帮助的人:140万
展开全部
我用 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个数变成了有序的。
由数学归纳法,最后一定会把所有的数进行排序。
不懂请追问。喜欢就请采纳吧~
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
s1093792990
2017-04-14 · 超过78用户采纳过TA的回答
知道小有建树答主
回答量:249
采纳率:100%
帮助的人:56.4万
展开全部
这是双循环,先执行外面一层再执行里面一层,共执行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]
这样排序就是拿出一个数和其他数字比,只要比其他数字大就进行排序,但是你这个排序方法有点奇葩,直接多声明一个变量用来装数组里的值然后对调数据不就可以了么,你为什么要这样又加又减?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式