“插入排序”的版本间的差异
跳到导航
跳到搜索
Jihongchang(讨论 | 贡献) (建立内容为“最坏情况下需要~N<sup>2</sup>/2次比较和~N<sup>2</sup>/2次交换。”的新页面) |
Jihongchang(讨论 | 贡献) |
||
| 第1行: | 第1行: | ||
| − | 最坏情况下需要~N<sup>2</sup>/2次比较和~N<sup>2</sup>/2次交换。 | + | 最坏情况下需要~N<sup>2</sup>/2次比较和~N<sup>2</sup>/2次交换。<syntaxhighlight lang="java"> |
| + | import java.lang.reflect.Array; | ||
| + | import java.util.Arrays; | ||
| + | import java.util.List; | ||
| + | |||
| + | public class Insertion<T extends Comparable> { | ||
| + | |||
| + | private static <T extends Comparable> boolean less(T a, T b) { | ||
| + | return a.compareTo(b) == -1; | ||
| + | } | ||
| + | |||
| + | private static <T> void exch(T[] a, int lo, int j) { | ||
| + | T tmp = a[lo]; | ||
| + | a[lo] = a[j]; | ||
| + | a[j] = tmp; | ||
| + | } | ||
| + | |||
| + | public static <T extends Comparable> void sort(T[] a) { | ||
| + | for (int i = 1; i < a.length; i++) { | ||
| + | for (int j = i; j > 0 && less(a[j], a[j-1]); j--) { | ||
| + | exch(a, j, j-1); | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | |||
| + | public static <T extends Comparable> List<T> sort(Class<T> clazz, List<T> list) { | ||
| + | T[] arr = (T[]) Array.newInstance(clazz, list.size()); | ||
| + | list.toArray(arr); | ||
| + | sort(arr); | ||
| + | return Arrays.asList(arr); | ||
| + | } | ||
| + | |||
| + | public static void main(String[] args) { | ||
| + | Integer[] arr = {5,4,6,3,7,2,8,1,9,0}; | ||
| + | Insertion.sort(arr); | ||
| + | |||
| + | System.out.print(arr[0]); | ||
| + | |||
| + | for (int i = 1; i < arr.length; i++) { | ||
| + | System.out.printf(", %d", arr[i]); | ||
| + | } | ||
| + | |||
| + | System.out.println(); | ||
| + | } | ||
| + | |||
| + | } | ||
| + | </syntaxhighlight> | ||
2022年11月9日 (三) 11:34的版本
最坏情况下需要~N2/2次比较和~N2/2次交换。
import java.lang.reflect.Array;
import java.util.Arrays;
import java.util.List;
public class Insertion<T extends Comparable> {
private static <T extends Comparable> boolean less(T a, T b) {
return a.compareTo(b) == -1;
}
private static <T> void exch(T[] a, int lo, int j) {
T tmp = a[lo];
a[lo] = a[j];
a[j] = tmp;
}
public static <T extends Comparable> void sort(T[] a) {
for (int i = 1; i < a.length; i++) {
for (int j = i; j > 0 && less(a[j], a[j-1]); j--) {
exch(a, j, j-1);
}
}
}
public static <T extends Comparable> List<T> sort(Class<T> clazz, List<T> list) {
T[] arr = (T[]) Array.newInstance(clazz, list.size());
list.toArray(arr);
sort(arr);
return Arrays.asList(arr);
}
public static void main(String[] args) {
Integer[] arr = {5,4,6,3,7,2,8,1,9,0};
Insertion.sort(arr);
System.out.print(arr[0]);
for (int i = 1; i < arr.length; i++) {
System.out.printf(", %d", arr[i]);
}
System.out.println();
}
}