快速排序的兩種實現方式(遞迴 非遞迴)

2021-06-01 21:00:07 字數 610 閱讀 7049

#ifndef quick_sort_h

#define quick_sort_h

#include#include#include/// 快速排序是不穩定的,其時間平均時間複雜度是o(nlgn)。

/// 逆序序列下效果最差,逼近 o(n2),起空間複雜度是 log2n,因為需要空間來儲存遞迴的區間範圍。

templateclass sort_quick

///快速排序非遞迴

static void sort(std::vector& arr)

std::stacks;

s.push(0);

s.push(n - 1);

while (s.size())}}

private:

static void _sort_r(std::vector& arr, int left, int right)

static int _partition(std::vector& arr, int left, int right)

arr[left]=data;

return left;

}};#endif // quick_sort_h

快速排序的兩種實現方式

從小 大排序 以首位元素作為基準元素 在起始位置小於結束位置的前提下,先從右到左迴圈陣列元素,如果大於基準元素,則向左移動結束位置的索引,當不滿足迴圈條件的時候,將索引是高位的元素賦予索引為低位的元素 也就是首位元素所在的地方 然後從左到右迴圈陣列元素,如果小於基準元素,則向右移動開始位置的索引,當...

二分查詢演算法的兩種實現方式 非遞迴實現和遞迴實現

二分查詢的條件是對一組有序陣列的查詢,這一點很容易忘記,在使用二分查詢的時候先要對陣列進行排序。先說一下二分查詢的思路 乙個有序陣列,想要查詢乙個數字key的下標,首先算出中間下標mid,利用mid把這個陣列分為兩半,前一半從下標0到mid 1,後一半從mid 1到陣列最後乙個元素 下標是陣列長度減...

快速排序的兩種實現思路和非遞迴實現 C 實現

思路一 第一種是根據演算法導論上的思想 取陣列的最後乙個元素為主元,i初始化為最低位元素的前乙個位置,j指向遍歷陣列中待排序的元素,當j所指元素比主元小的時候i i 1,然後交換i和j所指的元素,j不斷遍歷,遇到小於主元的就進行交換,這樣就能一直維持這樣乙個序列,i之前的元素 包括i所指元素本身 都...