java编程问题。用两个for循环来把输入的整数从小到大排序。
这样的代码看的费劲
数组排序的方法有冒泡和选择比较的好理解:
代码如下:
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]);
}
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个数变成了有序的。
由数学归纳法,最后一定会把所有的数进行排序。
不懂请追问。喜欢就请采纳吧~
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]
这样排序就是拿出一个数和其他数字比,只要比其他数字大就进行排序,但是你这个排序方法有点奇葩,直接多声明一个变量用来装数组里的值然后对调数据不就可以了么,你为什么要这样又加又减?