一種較為便捷的快排寫法

2021-06-21 00:56:55 字數 657 閱讀 3947

**思維:

通過設定哨兵a[low],從a[low+1]到a[high]依次與a[low]進行比較,最終目的是使哨兵左邊部分元素都比哨兵元素小,右邊部分元素都比哨兵元素大。然後對左右兩部分分別進行遞迴呼叫,最終實現所有元素的排序。

ps:此處是通過自增指標cur,將low之後比哨兵元素小的元素全部交換到前面部分,之後交換哨兵元素與cur指標所指元素,使得哨兵元素左邊部分元素值都比哨兵元素小,右邊部分元素值都比哨兵元素大,從而實現快排函式。

/*******快排******/

#include #includevoid quicksort(int *a,int low,int high);

void swap(int *a,int *b);

int main()

; quicksort(a,0,9);

printf("after:\n");

int i;

for(i=0;i<=9;++i)

printf("%d ",a[i]);

printf("\n");

return 0;

}void quicksort(int *a,int low,int high)

{ if(high

快排與一種優化

快速排序 quick sort 是計算機領域乙個重要的演算法。初學快排,理解起來並不難,核心理念主要是選取pivot軸心元素 選取pivot元素也有一定技巧,可能會影響到演算法的複雜度,需要多加揣摩 再從左向右尋找第乙個比pivot元素大的值,從右向左尋找第乙個比pivot元素小的值,當兩個 記號 ...

快排的兩種寫法

快速排序,原理很簡單就是在資料找乙個定點數,把小於這個數的數放到其左邊,大於這個定點數的數放到其右邊,再把左邊的數,右邊的數再按這種方式來排序,直至無數可排.先實現,不求空間消耗,把小於定點的數放乙個陣列 b,把大於定點的數的放乙個陣列 c,再把它們拷回陣列 a int quick sort int...

排序 快排的兩種寫法

之前的部落格記錄過各種排序 快排演算法 如下,該方法思路很直接也很清晰,但是在生成left和right時會需要新的空間,所以其空間複雜度要高一些。def quick sort li if len li 2 return li tmp li 0 快排中將序列分為左右的值 left x for x in...