Oppgave 1
Utskriften blir: 8 18 5 10 20 11 3 13 7 14
Oppgave 2
Integer[] p = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,17,18,19,21,23,26,27,29}; Tabell.innsettingssortering(p, Comparator.comparing(Integer::toBinaryString).reversed()); for (int k : p) System.out.print(k + " "); // Utskrift: 29 14 7 27 26 13 12 6 3 23 11 21 10 5 19 18 9 17 8 4 2 1
Oppgave 3
Integer[] p = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,17,18,19,21,23,26,27,29}; Comparator<Integer> c = (x,y) -> { int a = x, b = y; // bruker int-format int m = Integer.highestOneBit(a); // første 1-biten i a int n = Integer.highestOneBit(b); // første 1-biten i b while (m > 0 && n > 0) { if ((m & a) == 0 && (n & b) != 0) return -1; // 0 i a, 1 i b else if ((m & a) != 0 && (n & b) == 0) return 1; // 1 i a, 0 i b m >>= 1; n >>= 1; // flytter m og n } return m - n; // n = 0 -> b forfeder til a, m = 0 -> omvendt }; Tabell.innsettingssortering(p, c); for (int k : p) System.out.print(k + " "); // Utskrift: 1 2 4 8 17 9 18 19 5 10 21 11 23 3 6 12 13 26 27 7 14 29
Oppgave 4
Den eneste forskjellen fra løsningen på Oppgave 3 er at fortegnet snus i den siste return-setningen, dvs.
return n - m;
istedenfor return m - n;
Integer[] p = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,17,18,19,21,23,26,27,29}; Comparator<Integer> c = (x,y) -> { int a = x, b = y; // bruker int-format int m = Integer.highestOneBit(a); // første 1-biten i a int n = Integer.highestOneBit(b); // første 1-biten i b while (m > 0 && n > 0) { if ((m & a) == 0 && (n & b) != 0) return -1; // 0 i a, 1 i b else if ((m & a) != 0 && (n & b) == 0) return 1; // 1 i a, 0 i b m >>= 1; n >>= 1; // flytter m og n } return n - m; // n = 0 -> b forfeder til a, m = 0 -> omvendt }; Tabell.innsettingssortering(p, c); for (int k : p) System.out.print(k + " "); // Utskrift: 17 8 18 19 9 4 21 10 23 11 5 2 12 26 27 13 6 29 14 7 3 1
Oppgave 5
Integer[] p = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,17,18,19,21,23,26,27,29}; Comparator<Integer> c = (a, b) -> { String s = Integer.toBinaryString(a); String t = Integer.toBinaryString(b); int m = Math.min(s.length(), t.length()); for (int i = 0; i < m; i++) { int k = s.charAt(i) - t.charAt(i); if (k != 0) return k; } return t.length() - s.length(); }; Tabell.innsettingssortering(p, c); for (int k : p) System.out.print(k + " "); // Utskrift: 17 8 18 19 9 4 21 10 23 11 5 2 12 26 27 13 6 29 14 7 3 1
Oppgave 6
Integer[] p = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,17,18,19,21,23,26,27,29}; Comparator<Integer> c = (x,y) -> { int a = x, b = y; // bruker int-format int m = Integer.highestOneBit(a); // første 1-biten i a int n = Integer.highestOneBit(b); // første 1-biten i b while (m > 0 && n > 0) { if ((m & a) == 0 && (n & b) != 0) return -1; // 0 i a, 1 i b else if ((m & a) != 0 && (n & b) == 0) return 1; // 1 i a, 0 i b m >>= 1; n >>= 1; // flytter m og n } return m > 0 ? ((m & a) == 0 ? -1 : 1) : ((n & b) == 0 ? 1 : -1); }; Tabell.innsettingssortering(p, c); for (int k : p) System.out.print(k + " "); // Utskrift: 8 17 4 18 9 19 2 10 21 5 11 23 1 12 6 26 13 27 3 14 29 7