最近看演算法導論,把書中基本排序演算法的偽**用c++實現了一下。
插入排序
void insert_sort(int a, int length)
a[j + 1] = k;
}}
氣泡排序,書中描述為流行但低效的排序演算法
void bubble_sort(int a, int length)
} }}
歸併排序,非原址排序,因而不適合大量資料的排序
void merge(int a, int p, int q, int r)
else
}delete l;
delete r;
}void merge_sort(int a, int p , int r)
}
堆排序
void max_heapify(int a, int heap_size, int i)
else
largest = i;
if (r <= heap_size - 1 && a[r] > a[largest])
if (largest != i) }
void build_max_heap(int a, int length, int& heap_size)
}void heap_sort(int a, int length)
}
快速排序,雖然最壞情況下比堆排序慢,但一般情況下比堆排序快
int partition(int a, int p, int r)
} int k = a[i + 1];
a[i + 1] = a[r];
a[r] = k;
return i + 1;
}void quick_sort(int a, int p, int r)
}
基本排序排序演算法
時空複雜度 氣泡排序 時間o n 2 額外空間o 1 插入排序 時間o n 2 額外空間o 1 選擇排序 時間o n 2 額外空間o 1 基數排序 時間o k n k logn max 額外空間o n 臨時儲存 o b 記數,b為基的大小 記數排序 時間o n k 額外空間o k 希爾排序 時間o ...
基本排序排序演算法
時空複雜度 氣泡排序 時間o n 2 額外空間o 1 插入排序 時間o n 2 額外空間o 1 選擇排序 時間o n 2 額外空間o 1 基數排序 時間o k n k logn max 額外空間o n 臨時儲存 o b 記數,b為基的大小 記數排序 時間o n k 額外空間o k 希爾排序 時間o ...
基本排序演算法
將要排序的物件分作兩部份,乙個是已排序的,乙個是未排序的,從後端未排序部份選擇乙個最小值,並放入前端已排序部份的最後乙個,例如 排序前 70 80 31 37 10 1 48 60 33 80 1 80 31 37 10 70 48 60 33 80 選出最小值1 1 10 31 37 80 70 ...