-
-
Notifications
You must be signed in to change notification settings - Fork 52
Expand file tree
/
Copy pathpigeonhole_sort.cpp
More file actions
64 lines (53 loc) · 1.7 KB
/
Copy pathpigeonhole_sort.cpp
File metadata and controls
64 lines (53 loc) · 1.7 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
/**
* @file pigeonhole.cpp
*
* @author Perpuskita Ruldani
*
* @date Okt 2025
*
* @brief Program untuk mengurutkan data menggunakan algoritma Pigeonhole.
*
* Program ini mengurutkan sejumlah bilangan bulat direntang tertentu.
* Algoritma ini dimulai dengan cara mencari nilai maximum dan minimum data,
* Kemudian membuat vector kosong sejumlah ( nilai maximum data - nilai minimum data ) + 1,
* Data kemudian ditempatkan kedalam vector kosong sesuai dengan indeks [i - min_val],
*
* Hasilnya akan ditampilkan di terminal.
*/
#include <iostream>
#include <vector>
#include <algorithm>
void pigeonholeSort(std::vector<int>& arr) {
// Cari nilai minimum dan maksimum
int min_val = *min_element(arr.begin(), arr.end());
int max_val = *max_element(arr.begin(), arr.end());
int range = max_val - min_val + 1;
// Membuat pigeonholes
std::vector<std::vector<int>> holes(range);
// Menempatkan elemen ke pigeonhole sesuai nilainya
for (int num : arr) {
holes[num - min_val].push_back(num);
}
// Mengambil elemen dari pigeonhole secara berurutan
int index = 0;
for (int i = 0; i < range; i++) {
for (int num : holes[i]) {
arr[index++] = num;
}
}
}
int main() {
// inisialisasi data
std::vector<int> data = { 8, 3, 2, 7, 4, 6, 8, 5 };
// Menampilkan data sebelum diurutkan
std::cout << "Sebelum sort: ";
for (int x : data) std::cout << x << " ";
std::cout << std::endl;
// Mengurutkan data menggunakan pigeonhole sort
pigeonholeSort(data);
// Menampilkan data setelah diurutkan
std::cout << "Setelah sort : ";
for (int x : data) std::cout << x << " ";
std::cout << std::endl;
return 0;
}