給定一個陣列如何將資料由小到大排序?
int a[] = {5, 6, 4, 1, 3, 2};
越小的元素會經由交換慢慢「浮」到數列的頂端
演算法透過 相鄰元素兩兩比較,如果順序錯了就交換,經過多輪比較後,最大(或最小)的元素就會被「冒泡」到最後。
越小的元素會經由交換慢慢「浮」到數列的頂端
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++ 有提供內建的sort
可以直接用,會比自己寫跑得還快
int n = 6;
int arr[] = {5, 6, 4, 3, 1, 2};
sort(arr, arr+n);