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. 

Komentar

Postingan populer dari blog ini

Tugas 4 C++

Tugas 1 C++

Materi Fungsi dan Prosedur