Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 25703b2

Browse files
authored
feat: menambahkan contoh dari quick sorting (bellshade#166)
1 parent db8177c commit 25703b2

File tree

3 files changed

+149
-0
lines changed

3 files changed

+149
-0
lines changed
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package algorithm.datastructure.Sorting;
2+
3+
import java.util.Arrays;
4+
import java.util.List;
5+
6+
// interface untuk algoritma Sorting
7+
public interface AlgoritmaSorting {
8+
<T extends Comparable<T>> T[] sorting(T[] tidakTersorting);
9+
10+
@SuppressWarnings("unchecked")
11+
default <T extends Comparable<T>> List<T> sorting(List<T> tidakTersorting) {
12+
return Arrays.asList(
13+
sorting(tidakTersorting.toArray((T[]) new Comparable[tidakTersorting.size()]))
14+
);
15+
}
16+
}
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
package algorithm.datastructure.Sorting;
2+
3+
import static algorithm.datastructure.Sorting.SortingUtilites.*;
4+
5+
/**
6+
* salah satu algoritma sorting tercepat adalah quick sort
7+
* yaitu dengan cara membagi list dengan menggunakan sebuah pivot.
8+
* algoritma ini dikenal sebagai partition-exchange sort atau sorting
9+
* pergantian pembagi.
10+
* dalam perakteknya adalah yang tercepat dari berbagai algoritma
11+
* pengurutan dengan perbandingan, seperti merge sort atau heap sort
12+
* melakukan proses langsung pada input (in-place) dengan sedikit
13+
* tambahan memori. bekerja dengan baik pada berbagai jenis input
14+
* data (seperti angka dan karakter).
15+
*/
16+
17+
class QuickSort implements AlgoritmaSorting {
18+
// method untuk implementasi dari generic quick sorting
19+
@Override
20+
public <T extends Comparable<T>> T[] sorting(T[] array) {
21+
lakukanSorting(array, 0, array.length - 1);
22+
return array;
23+
}
24+
25+
// fungsi fungsi proses dari sorting
26+
private static <T extends Comparable<T>> void lakukanSorting(T[] array, int kiri, int kanan) {
27+
if (kiri < kanan) {
28+
int pivot = partisiAcak(array, kiri, kanan);
29+
lakukanSorting(array, kiri, pivot - 1);
30+
lakukanSorting(array, pivot, kanan);
31+
}
32+
}
33+
// acak array untuk menghindari urutan yang pda dasarnya
34+
// sudah di order
35+
private static <T extends Comparable<T>> int partisiAcak(
36+
T[] array,
37+
int kiri,
38+
int kanan
39+
) {
40+
int indeksAcak = kiri + (int)(Math.random() * (kanan - kiri + 1));
41+
swap(array, indeksAcak, kanan);
42+
return partisi(array, kiri, kanan);
43+
}
44+
45+
private static <T extends Comparable<T>> int partisi(T[] array, int kiri, int kanan) {
46+
int mid = (kiri + kanan) >>> 1;
47+
T pivot = array[mid];
48+
49+
while (kiri <= kanan) {
50+
while (lebihKecil(array[kiri], pivot)) {
51+
++kiri;
52+
}
53+
while (lebihKecil(pivot, array[kanan])) {
54+
--kanan;
55+
}
56+
if (kiri <= kanan) {
57+
swap(array, kiri, kanan);
58+
++kiri;
59+
--kanan;
60+
}
61+
}
62+
return kiri;
63+
}
64+
}
65+
66+
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
package algorithm.datastructure.Sorting;
2+
3+
import java.util.Arrays;
4+
import java.util.List;
5+
import java.util.stream.Collectors;
6+
7+
final class SortingUtilites {
8+
public static <T> void swap(T[] array, int i, int j) {
9+
T temp = array[i];
10+
array[i] = array[j];
11+
array[j] = temp;
12+
}
13+
14+
// membandingkan dua elemen untuk melihat apakah
15+
// yang pertama lebih kecil daripada yang kedua
16+
public static <T extends Comparable<T>> boolean lebihKecil(T elemenPertama, T elemenKedua) {
17+
return elemenPertama.compareTo(elemenKedua) < 0;
18+
}
19+
20+
// membandingkan dua elemen untuk melihat apakah
21+
// yang pertama lebih besar dari yang kedua
22+
public static <T extends Comparable<T>> boolean lebihBesar(T elemenPertama, T elemenKedua) {
23+
return elemenPertama.compareTo(elemenKedua) > 0;
24+
}
25+
26+
// membandingkan dua elemen untuk melihat apakah
27+
// elemen pertama lebih besar atau sama dengan
28+
// elemen kedua
29+
static <T extends Comparable<T>> boolean lebihBesarAtauSama(T elemenPertama, T elemenKedua) {
30+
return elemenPertama.compareTo(elemenKedua) >= 0;
31+
}
32+
33+
static void print(List<?> listUntukPrint) {
34+
String hasil = listUntukPrint.stream()
35+
.map(Object::toString)
36+
.collect(Collectors.joining(" "));
37+
System.out.println(hasil);
38+
}
39+
40+
static <T> void print(T[] array) {
41+
System.out.println(Arrays.toString(array));
42+
}
43+
44+
public static <T extends Comparable<T>> void flip(T[] array, int kiri, int kanan) {
45+
while (kiri <= kanan) {
46+
swap(array, kiri++, kanan++);
47+
}
48+
}
49+
50+
public static <T extends Comparable<T>> boolean telahDisorting(T[] array) {
51+
for (int i = 1; i < array.length; i++) {
52+
if (lebihKecil(array[i], array[i - 1])) {
53+
return false;
54+
}
55+
}
56+
return true;
57+
}
58+
59+
public static <T extends Comparable<T>> boolean telahDisorting(List<T> list) {
60+
for (int i = 1; i < list.size(); i++) {
61+
if (lebihKecil(list.get(i), list.get(i - 1))) {
62+
return false;
63+
}
64+
}
65+
return true;
66+
}
67+
}

0 commit comments

Comments
 (0)