C++ 小社
排序演算法
講師:蘇西
排序 Sort
就是把東西依照特定順序排列
有講跟沒講一樣欸

時間複雜度 Time complexity
氣泡排序法
Bubble sort
排序過程中,較大的元素會像水中的氣泡一樣,透過不斷地與相鄰元素比較和交換,慢慢地、一個一個「浮」到數列的末端(頂端),所以叫做氣泡排序法
1
5
3
9
7
排序過程中,較大的元素會像水中的氣泡一樣,透過不斷地與相鄰元素比較和交換,慢慢地、一個一個「浮」到數列的末端(頂端),所以叫做氣泡排序法
1
5
3
9
7
排序過程中,較大的元素會像水中的氣泡一樣,透過不斷地與相鄰元素比較和交換,慢慢地、一個一個「浮」到數列的末端(頂端),所以叫做氣泡排序法
1
5
3
9
7
排序過程中,較大的元素會像水中的氣泡一樣,透過不斷地與相鄰元素比較和交換,慢慢地、一個一個「浮」到數列的末端(頂端),所以叫做氣泡排序法
1
5
3
7
9
排序過程中,較大的元素會像水中的氣泡一樣,透過不斷地與相鄰元素比較和交換,慢慢地、一個一個「浮」到數列的末端(頂端),所以叫做氣泡排序法
1
5
3
7
9
排序過程中,較大的元素會像水中的氣泡一樣,透過不斷地與相鄰元素比較和交換,慢慢地、一個一個「浮」到數列的末端(頂端),所以叫做氣泡排序法
1
5
3
7
9
排序過程中,較大的元素會像水中的氣泡一樣,透過不斷地與相鄰元素比較和交換,慢慢地、一個一個「浮」到數列的末端(頂端),所以叫做氣泡排序法
1
5
3
7
9
排序過程中,較大的元素會像水中的氣泡一樣,透過不斷地與相鄰元素比較和交換,慢慢地、一個一個「浮」到數列的末端(頂端),所以叫做氣泡排序法
1
5
3
7
9
排序過程中,較大的元素會像水中的氣泡一樣,透過不斷地與相鄰元素比較和交換,慢慢地、一個一個「浮」到數列的末端(頂端),所以叫做氣泡排序法
1
5
3
7
9
排序過程中,較大的元素會像水中的氣泡一樣,透過不斷地與相鄰元素比較和交換,慢慢地、一個一個「浮」到數列的末端(頂端),所以叫做氣泡排序法
1
5
3
7
9
void bubbleSort(vector<int>& arr) {
int n = arr.size();
for (int i = 0; i < n - 1; ++i) {
// 內層進行兩兩相鄰元素比較與交換
for (int j = 0; j < n - 1 - i; ++j) {
if (arr[j] > arr[j + 1]) {
swap(arr[j], arr[j + 1]);
}
}
}
}選擇排序法
Selection Sort
非常直覺,就是每次都抽出原序列裡面最小的數,
依抽出來的順序進行排列
1
2
3
5
7
非常直覺,就是每次都抽出原序列裡面最小的數,
依抽出來的順序進行排列
1
2
3
5
7
非常直覺,就是每次都抽出原序列裡面最小的數,
依抽出來的順序進行排列
1
2
3
5
7
非常直覺,就是每次都抽出原序列裡面最小的數,
依抽出來的順序進行排列
1
2
3
5
7
非常直覺,就是每次都抽出原序列裡面最小的數,
依抽出來的順序進行排列
1
2
3
5
7
非常直覺,就是每次都抽出原序列裡面最小的數,
依抽出來的順序進行排列
1
2
3
5
7
void selectionSort(vector<int>& arr) {
int n = arr.size();
// 每次選擇最小值放到前面
for (int i = 0; i < n - 1; ++i) {
int minIndex = i; // 假設目前最小值位置
for (int j = i + 1; j < n; ++j) {
if (arr[j] < arr[minIndex]) {
minIndex = j;
}
}
// 將找到的最小值放到正確位置
swap(arr[i], arr[minIndex]);
}
}
插入排序法
Insertion Sort
往左到右檢查每個數值是不是在正確的位置
如果不是,就把它插入到正確的位置
1
2
3
5
7
往左到右檢查每個數值是不是在正確的位置
如果不是,就把它插入到正確的位置
1
2
3
5
7
往左到右檢查每個數值是不是在正確的位置
如果不是,就把它插入到正確的位置
1
2
3
5
7
void insertionSort(vector<int>& arr) {
int n = arr.size();
for (int i = 1; i < n; ++i) {
int key = arr[i]; // 待插入的元素
int j = i - 1;
// 將比 key 大的元素往右移
while (j >= 0 && arr[j] > key) {
arr[j + 1] = arr[j];
j--;
}
// 將 key 插入正確位置
arr[j + 1] = key;
}
}
合併排序法
Merge Sort

STL Sort
array
#include <algorithm>
sort(ary+0, ary+n);
less<Type>:小於,i+1小於i的就交換swap(升序)
less_equal<Type>:小於等於,i+1小於等於i的就交換swap(升序)
greater<Type>:大於,i+1大於i的就交換swap(降序)
greater_equal<Type>:大於等於,i+1大於等於i的就交換swap(降序)array
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
bool mycompare(int a, int b) {
return a > b; // Descending order
}
int main() {
int arr[] = {5, 4, 1, 7, 3, 8, 9, 10, 6, 2};
// std::vector -> vector
vector<int> v(arr, arr + 10);
// std::sort -> sort
sort(v.begin(), v.end(), mycompare);
// std::cout -> cout, std::endl -> endl
cout << "sort vector by function (decreasing):" << endl;
for (int i : v) {
cout << i << " ";
}
cout << endl;
return 0;
}C++ 小社
By Suzy Huang
C++ 小社
- 16