Materi Sorting
Sorting
Outline
Sorting Definition
Bubble Sort
Selection Sort
Insertion Sort
Merge Sort
· Sorting Definition
· Sorting of number, alphabet, word or other value with certain rule
·
Illustrate problem
solving
·
Technique of using
selection, looping, method and array
·
Demonstrate
perform/algorithm complexity
·
Accelerate searching
process
· Sorting Algorithm
· Basic sorting algorithm:
· Bubble Sort
· Insertion Sort
· Selection Sort
· Advanced sorting algorithm:
· Merge Sort
· Quick Sort
· Bucket Sort
· Shell Sort
· Radix Sort
· External Sort
· Bubble Sort
· Also call as sinking sort or exchange sort
· Ascending : sorting from small to big
· Descending : sorting from big to small
· Value into array
· Adjacent value compared
· If increasing, then change to become decreasing
· At round:
· 1, array at 1 (index 0) is a smallest value
· 2, array at 2 (index 1) is a second smallest value
· n-1, array at n (index n-1) is a biggest value
· Number of round = n-1
· Prosedur swap
· void swap(int& a, int& b) {
·
int
temp = a;
·
a
= b;
·
b
= temp;
·
}
· bubbleSort
· void bubbleSort(int arr[], int n) {
·
for
(int i = 0; i < n - 1; i++) {
·
for
(int j = n - 1; j > i; j--) { // Mulai dari belakang
·
if
(arr[j] < arr[j - 1]) {
·
swap(arr[j],
arr[j - 1]);
·
}
·
}
·
}
·
}
· main
· int main() {
·
int
arr[] = {5, 1, 4, 2, 8};
·
int
n = sizeof(arr) / sizeof(arr[0]);
·
bubbleSort(arr,
n);
·
for
(int i = 0; i < n; i++) {
·
cout
<< arr[i] << " ";
·
}
·
cout
<< endl;
·
return
0;
·
}
· election Sort
· Value sent into array
· Search for the biggest value put at the end of array
· At round:
· 1, array at 1 (index 0) is a small value
· 2, array at 2 (index 1) is a second small value
· n-1, array at n (index n-1) is a biggest value
· Number of round = n-1
· Kode selectionSort
· void selectionSort(int arr[], int n) {
·
for
(int i = n - 1; i >= 0; i--) {
·
int
maxIdx = 0;
·
for
(int j = 1; j <= i; j++) {
·
if
(arr[j] > arr[maxIdx]) {
·
maxIdx
= j;
·
}
·
}
·
//
Tukar elemen terbesar dengan elemen di posisi i
·
swap(arr[maxIdx],
arr[i]);
·
}
·
}
· main
· int main() {
·
int
arr[] = {64, 25, 12, 22, 11};
·
int
n = sizeof(arr) / sizeof(arr[0]);
·
·
cout
<< "Array sebelum sorting: ";
·
for
(int i = 0; i < n; i++) {
·
cout
<< arr[i] << " ";
·
}
·
cout
<< endl;
·
·
selectionSort(arr,
n);
·
·
cout
<< "Array setelah sorting descending: ";
·
for
(int i = 0; i < n; i++) {
·
cout
<< arr[i] << " ";
·
}
·
cout
<< endl;
·
·
return
0;
·
}
· Insertion Sort
· Value sent into array
·
Using helper container
·
Value compared with
index previously
·
Every round did not
produce the biggest value or the smallest value.
·
Number of round = n-1
· Kode Insertion
· void insertionSort(int arr[], int n) {
·
for
(int i = 1; i < n; i++) {
·
int
key = arr[i];
·
int
j = i - 1;
·
·
//
Geser elemen yang lebih besar dari key ke kanan
·
while
(j >= 0 && arr[j] > key) {
·
arr[j
+ 1] = arr[j];
·
j--;
·
}
·
·
//
Sisipkan key di posisi yang tepat
·
arr[j
+ 1] = key;
·
}
·
}
· main
· int main() {
·
int
arr[] = {12, 11, 13, 5, 6};
·
int
n = sizeof(arr) / sizeof(arr[0]);
·
·
cout
<< "Array sebelum sorting: ";
·
for
(int i = 0; i < n; i++) {
·
cout
<< arr[i] << " ";
·
}
·
cout
<< endl;
·
·
insertionSort(arr,
n);
·
·
cout
<< "Array setelah sorting: ";
·
for
(int i = 0; i < n; i++) {
·
cout
<< arr[i] << " ";
·
}
·
cout
<< endl;
·
·
return
0;
·
}
· Kode Lengkap
· #include <iostream>
· using namespace std;
·
· void insertionSort(int arr[], int n) {
· for (int i = 1; i < n; i++) {
· int key = arr[i];
· int j = i - 1;
·
· // Geser elemen yang lebih besar dari key ke kanan
· while (j >= 0 && arr[j] > key) {
· arr[j + 1] = arr[j];
· j--;
· }
·
· // Sisipkan key di posisi yang tepat
· arr[j + 1] = key;
· }
· }
· int main() {
·
int
arr[] = {12, 11, 13, 5, 6};
·
int
n = sizeof(arr) / sizeof(arr[0]);
·
·
cout
<< "Array sebelum sorting: ";
·
for
(int i = 0; i < n; i++) {
·
cout
<< arr[i] << " ";
·
}
·
cout
<< endl;
·
·
insertionSort(arr,
n);
·
·
cout
<< "Array setelah sorting: ";
·
for
(int i = 0; i < n; i++) {
·
cout
<< arr[i] << " ";
·
}
·
cout
<< endl;
·
·
return
0;
·
}
· Merge Sort
· Value sent into array
·
divided data become
two based on index
·
Each one sorted
·
Re-Merge data
· Kode merge
· // Fungsi untuk menggabungkan dua bagian array yang sudah terurut
·
void
merge(vector<int>& arr, int left, int mid, int right) {
·
int
n1 = mid - left + 1;
·
int
n2 = right - mid;
·
·
//
Buat array sementara
·
vector<int>
L(n1), R(n2);
·
·
//
Salin data ke array sementara
·
for
(int i = 0; i < n1; i++)
·
L[i]
= arr[left + i];
·
for
(int j = 0; j < n2; j++)
·
R[j]
= arr[mid + 1 + j];
·
·
//
Gabungkan array sementara kembali ke arr
·
int
i = 0, j = 0, k = left;
·
while
(i < n1 && j < n2) {
·
if
(L[i] <= R[j]) {
·
arr[k]
= L[i];
·
i++;
·
}
else {
·
arr[k]
= R[j];
·
j++;
·
}
·
k++;
·
}
· / Salin sisa elemen
· while (i < n1) {
· arr[k] = L[i];
· i++;
· k++;
· }
· while (j < n2) {
· arr[k] = R[j];
· j++;
· k++;
· }
· }
·
· // Fungsi rekursif untuk merge sort
· void mergeSort(vector<int>& arr, int left, int right) {
· if (left < right) {
· int mid = left + (right - left) / 2;
·
· // Urutkan bagian kiri dan kanan
· mergeSort(arr, left, mid);
· mergeSort(arr, mid + 1, right);
·
· // Gabungkan
· merge(arr, left, mid, right);
· }
· }
· main
· int main() {
·
vector<int>
arr = {12, 11, 13, 5, 6, 7};
·
int
n = arr.size();
·
·
cout
<< "Array sebelum sorting: ";
·
for
(int i : arr) cout << i << " ";
·
cout
<< endl;
·
·
mergeSort(arr,
0, n - 1);
·
·
cout
<< "Array setelah sorting: ";
·
for
(int i : arr) cout << i << " ";
·
cout
<< endl;
·
·
return
0;
·
}
· int main() {
·
vector<int>
arr = {12, 11, 13, 5, 6, 7};
·
int
n = arr.size();
·
·
cout
<< "Array sebelum sorting: ";
·
for
(int i : arr) cout << i << " ";
·
cout
<< endl;
·
·
mergeSort(arr,
0, n - 1);
·
·
cout
<< "Array setelah sorting: ";
·
for
(int i : arr) cout << i << " ";
·
cout
<< endl;
·
·
return
0;
·
}
· Kode Lengkap
· #include <iostream>
· #include <vector>
·
· using namespace std;
·
· // Fungsi untuk menggabungkan dua bagian array yang sudah terurut
· void merge(vector<int>& arr, int left, int mid, int right) {
· int n1 = mid - left + 1;
· int n2 = right - mid;
·
· // Buat array sementara
· vector<int> L(n1), R(n2);
·
· // Salin data ke array sementara
· for (int i = 0; i < n1; i++)
· L[i] = arr[left + i];
· for (int j = 0; j < n2; j++)
· R[j] = arr[mid + 1 + j];
·
· // Gabungkan array sementara kembali ke arr
· int i = 0, j = 0, k = left;
· while (i < n1 && j < n2) {
· if (L[i] <= R[j]) {
· arr[k] = L[i];
· i++;
· } else {
· arr[k] = R[j];
· j++;
· }
· k++;
· }
·
· // Salin sisa elemen
· while (i < n1) {
· arr[k] = L[i];
· i++;
· k++;
· }
· Exercise
· Create a program that allows to input user authentication details, show the inputted data, sorting name data by ascending.
Sorting Definition
Bubble Sort
Selection Sort
Insertion Sort
Merge Sort
· Sorting Definition
· Sorting of number, alphabet, word or other value with certain rule
·
Illustrate problem
solving
·
Technique of using
selection, looping, method and array
·
Demonstrate
perform/algorithm complexity
·
Accelerate searching
process
· Sorting Algorithm
· Basic sorting algorithm:
· Bubble Sort
· Insertion Sort
· Selection Sort
· Advanced sorting algorithm:
· Merge Sort
· Quick Sort
· Bucket Sort
· Shell Sort
· Radix Sort
· External Sort
· Bubble Sort
· Also call as sinking sort or exchange sort
· Ascending : sorting from small to big
· Descending : sorting from big to small
· Value into array
· Adjacent value compared
· If increasing, then change to become decreasing
· At round:
· 1, array at 1 (index 0) is a smallest value
· 2, array at 2 (index 1) is a second smallest value
· n-1, array at n (index n-1) is a biggest value
· Number of round = n-1
· Prosedur swap
· void swap(int& a, int& b) {
·
int
temp = a;
·
a
= b;
·
b
= temp;
·
}
· bubbleSort
· void bubbleSort(int arr[], int n) {
·
for
(int i = 0; i < n - 1; i++) {
·
for
(int j = n - 1; j > i; j--) { // Mulai dari belakang
·
if
(arr[j] < arr[j - 1]) {
·
swap(arr[j],
arr[j - 1]);
·
}
·
}
·
}
·
}
· main
· int main() {
·
int
arr[] = {5, 1, 4, 2, 8};
·
int
n = sizeof(arr) / sizeof(arr[0]);
·
bubbleSort(arr,
n);
·
for
(int i = 0; i < n; i++) {
·
cout
<< arr[i] << " ";
·
}
·
cout
<< endl;
·
return
0;
·
}
· election Sort
· Value sent into array
· Search for the biggest value put at the end of array
· At round:
· 1, array at 1 (index 0) is a small value
· 2, array at 2 (index 1) is a second small value
· n-1, array at n (index n-1) is a biggest value
· Number of round = n-1
· Kode selectionSort
· void selectionSort(int arr[], int n) {
·
for
(int i = n - 1; i >= 0; i--) {
·
int
maxIdx = 0;
·
for
(int j = 1; j <= i; j++) {
·
if
(arr[j] > arr[maxIdx]) {
·
maxIdx
= j;
·
}
·
}
·
//
Tukar elemen terbesar dengan elemen di posisi i
·
swap(arr[maxIdx],
arr[i]);
·
}
·
}
· main
· int main() {
·
int
arr[] = {64, 25, 12, 22, 11};
·
int
n = sizeof(arr) / sizeof(arr[0]);
·
·
cout
<< "Array sebelum sorting: ";
·
for
(int i = 0; i < n; i++) {
·
cout
<< arr[i] << " ";
·
}
·
cout
<< endl;
·
·
selectionSort(arr,
n);
·
·
cout
<< "Array setelah sorting descending: ";
·
for
(int i = 0; i < n; i++) {
·
cout
<< arr[i] << " ";
·
}
·
cout
<< endl;
·
·
return
0;
·
}
· Insertion Sort
· Value sent into array
·
Using helper container
·
Value compared with
index previously
·
Every round did not
produce the biggest value or the smallest value.
·
Number of round = n-1
· Kode Insertion
· void insertionSort(int arr[], int n) {
·
for
(int i = 1; i < n; i++) {
·
int
key = arr[i];
·
int
j = i - 1;
·
·
//
Geser elemen yang lebih besar dari key ke kanan
·
while
(j >= 0 && arr[j] > key) {
·
arr[j
+ 1] = arr[j];
·
j--;
·
}
·
·
//
Sisipkan key di posisi yang tepat
·
arr[j
+ 1] = key;
·
}
·
}
· main
· int main() {
·
int
arr[] = {12, 11, 13, 5, 6};
·
int
n = sizeof(arr) / sizeof(arr[0]);
·
·
cout
<< "Array sebelum sorting: ";
·
for
(int i = 0; i < n; i++) {
·
cout
<< arr[i] << " ";
·
}
·
cout
<< endl;
·
·
insertionSort(arr,
n);
·
·
cout
<< "Array setelah sorting: ";
·
for
(int i = 0; i < n; i++) {
·
cout
<< arr[i] << " ";
·
}
·
cout
<< endl;
·
·
return
0;
·
}
· Kode Lengkap
· #include <iostream>
· using namespace std;
·
· void insertionSort(int arr[], int n) {
· for (int i = 1; i < n; i++) {
· int key = arr[i];
· int j = i - 1;
·
· // Geser elemen yang lebih besar dari key ke kanan
· while (j >= 0 && arr[j] > key) {
· arr[j + 1] = arr[j];
· j--;
· }
·
· // Sisipkan key di posisi yang tepat
· arr[j + 1] = key;
· }
· }
· int main() {
·
int
arr[] = {12, 11, 13, 5, 6};
·
int
n = sizeof(arr) / sizeof(arr[0]);
·
·
cout
<< "Array sebelum sorting: ";
·
for
(int i = 0; i < n; i++) {
·
cout
<< arr[i] << " ";
·
}
·
cout
<< endl;
·
·
insertionSort(arr,
n);
·
·
cout
<< "Array setelah sorting: ";
·
for
(int i = 0; i < n; i++) {
·
cout
<< arr[i] << " ";
·
}
·
cout
<< endl;
·
·
return
0;
·
}
· Merge Sort
· Value sent into array
·
divided data become
two based on index
·
Each one sorted
·
Re-Merge data
· Kode merge
· // Fungsi untuk menggabungkan dua bagian array yang sudah terurut
·
void
merge(vector<int>& arr, int left, int mid, int right) {
·
int
n1 = mid - left + 1;
·
int
n2 = right - mid;
·
·
//
Buat array sementara
·
vector<int>
L(n1), R(n2);
·
·
//
Salin data ke array sementara
·
for
(int i = 0; i < n1; i++)
·
L[i]
= arr[left + i];
·
for
(int j = 0; j < n2; j++)
·
R[j]
= arr[mid + 1 + j];
·
·
//
Gabungkan array sementara kembali ke arr
·
int
i = 0, j = 0, k = left;
·
while
(i < n1 && j < n2) {
·
if
(L[i] <= R[j]) {
·
arr[k]
= L[i];
·
i++;
·
}
else {
·
arr[k]
= R[j];
·
j++;
·
}
·
k++;
·
}
· / Salin sisa elemen
· while (i < n1) {
· arr[k] = L[i];
· i++;
· k++;
· }
· while (j < n2) {
· arr[k] = R[j];
· j++;
· k++;
· }
· }
·
· // Fungsi rekursif untuk merge sort
· void mergeSort(vector<int>& arr, int left, int right) {
· if (left < right) {
· int mid = left + (right - left) / 2;
·
· // Urutkan bagian kiri dan kanan
· mergeSort(arr, left, mid);
· mergeSort(arr, mid + 1, right);
·
· // Gabungkan
· merge(arr, left, mid, right);
· }
· }
· main
· int main() {
·
vector<int>
arr = {12, 11, 13, 5, 6, 7};
·
int
n = arr.size();
·
·
cout
<< "Array sebelum sorting: ";
·
for
(int i : arr) cout << i << " ";
·
cout
<< endl;
·
·
mergeSort(arr,
0, n - 1);
·
·
cout
<< "Array setelah sorting: ";
·
for
(int i : arr) cout << i << " ";
·
cout
<< endl;
·
·
return
0;
·
}
· int main() {
·
vector<int>
arr = {12, 11, 13, 5, 6, 7};
·
int
n = arr.size();
·
·
cout
<< "Array sebelum sorting: ";
·
for
(int i : arr) cout << i << " ";
·
cout
<< endl;
·
·
mergeSort(arr,
0, n - 1);
·
·
cout
<< "Array setelah sorting: ";
·
for
(int i : arr) cout << i << " ";
·
cout
<< endl;
·
·
return
0;
·
}
· Kode Lengkap
· #include <iostream>
· #include <vector>
·
· using namespace std;
·
· // Fungsi untuk menggabungkan dua bagian array yang sudah terurut
· void merge(vector<int>& arr, int left, int mid, int right) {
· int n1 = mid - left + 1;
· int n2 = right - mid;
·
· // Buat array sementara
· vector<int> L(n1), R(n2);
·
· // Salin data ke array sementara
· for (int i = 0; i < n1; i++)
· L[i] = arr[left + i];
· for (int j = 0; j < n2; j++)
· R[j] = arr[mid + 1 + j];
·
· // Gabungkan array sementara kembali ke arr
· int i = 0, j = 0, k = left;
· while (i < n1 && j < n2) {
· if (L[i] <= R[j]) {
· arr[k] = L[i];
· i++;
· } else {
· arr[k] = R[j];
· j++;
· }
· k++;
· }
·
· // Salin sisa elemen
· while (i < n1) {
· arr[k] = L[i];
· i++;
· k++;
· }
· Exercise
· Create a program that allows to input user authentication details, show the inputted data, sorting name data by ascending.
Komentar
Posting Komentar