“插入排序”的版本间的差异

来自姬鸿昌的知识库
跳到导航 跳到搜索
(建立内容为“最坏情况下需要~N<sup>2</sup>/2次比较和~N<sup>2</sup>/2次交换。”的新页面)
 
第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();
    }

}