C++ Sorting

C++ Sorting

給定一個陣列如何將資料由小到大排序?

int a[] = {5, 6, 4, 1, 3, 2};

越小的元素會經由交換慢慢「浮」到數列的頂端

演算法透過 相鄰元素兩兩比較,如果順序錯了就交換,經過多輪比較後,最大(或最小)的元素就會被「冒泡」到最後。

Bubble sort

越小的元素會經由交換慢慢「浮」到數列的頂端

void bubble_sort(int a[], int n)
{
    for(int i = 0; i < n - 1; i++)
    {
        for(int j = 0; j < n - i - 1; j++)
        {
            if(a[j] > a[j + 1])
                swap(a[j], a[j + 1]);
        }
    }
}

每一輪都「選」出剩下元素中最小(或最大)的那個,放到正確的位置。

void selection_sort(int a[], int n) {
    for (int i = 0; i < n - 1; i++) {
        int minIndex = i;
        for (int j = i + 1; j < n; j++) {
            if (a[j] < a[minIndex]) {
                minIndex = j;
            }
        }
        if (minIndex != i)
            swap(a[i], a[minIndex]);
    }
}
void insertion_sort(int a[], int n) {
    for (int i = 1; i < n; i++) {
        int key = a[i];  
        int j = i - 1;
        while (j >= 0 && a[j] > key) {
            a[j + 1] = a[j]; 
            j--;
        }
        a[j + 1] = key; 
    }
}

把陣列分成「已排序」和「未排序」兩部分,每次從未排序區挑出一個元素,插入到已排序區的正確位置。

C++ built-in function

C++ 有提供內建的sort

可以直接用,會比自己寫跑得還快

int n = 6;
int arr[] = {5, 6, 4, 3, 1, 2};
sort(arr, arr+n);

練習

C++ Sorting

By ernestii26