python三维数组排序_数组排序
对数组进⾏排序是程序中⾮常基本的需求。常⽤的排序算法有冒泡排序、插⼊排序和快速排序等。
我们来看⼀下如何使⽤冒泡排序算法对⼀个整型数组从⼩到⼤进⾏排序:
// 冒泡排序
----
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
int[] ns = { 28, 12, 89, 73, 65, 18, 96, 50, 8, 36 };
// 排序前:
System.out.String(ns));
for (int i = 0; i < ns.length - 1; i++) {
for (int j = 0; j < ns.length - i - 1; j++) {
if (ns[j] > ns[j+1]) {
// 交换ns[j]和ns[j+1]:
int tmp = ns[j];
ns[j] = ns[j+1];
ns[j+1] = tmp;
}
}
}
// 排序后:
System.out.String(ns));
}
}
冒泡排序的特点是,每⼀轮循环后,最⼤的⼀个数被交换到末尾,因此,下⼀轮循环就可以“刨除”最后的数,每⼀轮循环都⽐上⼀轮循环的结束位置靠前⼀位。
另外,注意到交换两个变量的值必须借助⼀个临时变量。像这么写是错误的:
int x = 1;
int y = 2;
x = y; // x现在是2
y = x; // y现在还是2
正确的写法是:
int x = 1;
int y = 2;
int t = x; // 把x的值保存在临时变量t中, t现在是1
x = y; // x现在是2
y = t; // y现在是t的值1
实际上,Java的标准库已经内置了排序功能,我们只需要调⽤JDK提供的Arrays.sort()就可以排序:
// 排序
----
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
int[] ns = { 28, 12, 89, 73, 65, 18, 96, 50, 8, 36 };
Arrays.sort(ns);
System.out.String(ns));
}
}
必须注意,对数组排序实际上修改了数组本⾝。例如,排序前的数组是:
int[] ns = { 9, 3, 6, 5 };
在内存中,这个整型数组表⽰如下:
┌───┬───┬───┬───┐
ns───>│ 9 │ 3 │ 6 │ 5 │
└───┴───┴───┴───┘
当我们调⽤Arrays.sort(ns);后,这个整型数组在内存中变为:
┌───┬───┬───┬───┐
ns───>│ 3 │ 5 │ 6 │ 9 │
└───┴───┴───┴───┘
即变量ns指向的数组内容已经被改变了。
如果对⼀个字符串数组进⾏排序,例如:
String[] ns = { "banana", "apple", "pear" };
排序前,这个数组在内存中表⽰如下:
┌──────────────────────────────────┐
┌───┼──────────────────────┐ │
│ │ ▼ ▼
┌───┬─┴─┬─┴─┬───┬────────┬───┬───────┬───┬──────┬───┐ns ─────>│░░░│░░░│░░░│ │"banana"│ │"apple"│ │"pear"│ │
└─┬─┴───┴───┴───┴────────┴───┴───────┴───┴──────┴───┘│ ▲
└─────────────────┘
调⽤Arrays.sort(ns);排序后,这个数组在内存中表⽰如下:
┌──────────────────────────────────┐
┌───┼──────────┐ │
│ │ ▼ ▼
┌───┬─┴─┬─┴─┬───┬────────┬───┬───────┬───┬──────┬───┐ns ─────>│░░░│░░░│░░░│ │"banana"│ │"apple"│ │"pear"│ │
└─┬─┴───┴───┴───┴────────┴───┴───────┴───┴──────┴───┘│ ▲
└──────────────────────────────┘
原来的3个字符串在内存中均没有任何变化,但是ns数组的每个元素指向变化了。
练习
请思考如何实现对数组进⾏降序排序:
// 降序排序
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
int[] ns = { 28, 12, 89, 73, 65, 18, 96, 50, 8, 36 };
// 排序前:
System.out.String(ns));
----
// TODO:
快速排序python实现
----
/
/ 排序后:
System.out.String(ns));
if (String(ns).equals("[96, 89, 73, 65, 50, 36, 28, 18, 12, 8]")) {
System.out.println("测试成功");
} else {
System.out.println("测试失败");
}
}
}
⼩结
常⽤的排序算法有冒泡排序、插⼊排序和快速排序等;
冒泡排序使⽤两层for循环实现排序;
交换两个变量的值需要借助⼀个临时变量。
可以直接使⽤Java标准库提供的Arrays.sort()进⾏排序;对数组排序会直接修改数组本⾝。