c++之排塊改進(隨機值)
阿新 • • 發佈:2020-12-23
- 數量少(5~25),插入排序很高效
- 一個影響快排效率的因素就是: 基準值的選擇
- 本文將演示一種隨之法的快排
原始碼
template <typename T> void quick_sort(T arr[], int low, int high) { if (low > high) return; int left = low; int right = high; srand((unsigned) time(NULL)); int pivot_pos = (rand() % (high - low + 1)) + low; int key = arr[pivot_pos]; while (left < right) { while (left < right && arr[right] >= key) --right; if (left < right) arr[left++] = arr[right]; while (left < right && arr[left] < key) ++left; if (left < right) arr[right--] = arr[left]; } arr[left] = key; quick_sort(arr, low, left - 1); quick_sort(arr, left + 1, high); }
核心原始碼
srand((unsigned) time(NULL));
int pivot_pos = (rand() % (high - low + 1)) + low;
int key = arr[pivot_pos];
改為生成隨機數的方法來獲取基準數的索引。
缺點
很明顯,隨機值可能是 0 or max_pos,時間複雜度與改進前是一致的。