快速排序的三種方法(遞迴)

2021-09-12 14:30:38 字數 1567 閱讀 3425

快排

一.確定基準值有3種

選最左或者最右的那個數作為基準值

三數取中法(就是取left,mid和right三個數中中間的那個數作為基準值)

取隨機值作為基基準值

二.將陣列分為兩部分比基準值小的放在左邊,比基準值大的放在右邊

1.hover法:b就是下面**的begin e是end

2.挖坑法:用圓圈圈的為坑

3.前後下表法:c就是**裡面的i

三.分治演算法(將乙個大問題轉化為兩個小問題)

將[ left , right ]區間分為[ left ,div-1 ]和[ div+1 , right]

四.終止條件

1.left == right 陣列裡面只剩下乙個數了為有序的

2.left < right 陣列裡沒有數了

#include#includevoid swap(int *a, int *b)

//前後座標

int parition_3(int arr, int left, int right)

} swap(arr + d, arr + right);

return d;

}//挖坑法

int parition_2(int arr, int left, int right)

arr[begin] = arr[end];

} arr[begin] = pivot;

return begin;

}//hover法

int parition_1(int arr, int left, int right)

swap(arr + begin, arr + end);

} swap(arr + begin, arr + right);

return begin;

}void quicksort(int arr, int left,int right)

int div = parition_3(arr, left, right);

quicksort(arr, left, div - 1);

quicksort(arr, div+1, right);

}int main();

int size = sizeof(arr) / sizeof(int);

int left = 0;

int right = size - 1;

quicksort(arr, left,right);

for (int i = 0; i < size; i++)

printf("\n");

system("pause");

return 0;

}

php實現快速排序的三種方法分享

寫了三種php快速排示例,第一種效率低但最簡單最容易理解,第二個是演算法導論上提供的單向一次遍歷找中值方法,第三種是雙向遍歷找中值經典快排演算法。三組演算法實現和比較如下 方法一 該方法比較直觀,但損失了大量的空間為代價,使用了效率較低的merge函式。在三種方法中效率最低。最壞情況下演算法退化為 ...

計數排序的三種方法

count sort.cpp 定義控制台應用程式的入口點。include stdafx.h include using namespace std const int len 100 class countsort 計數排序類 countsort countsort length len int c...

快速排序的三種分割槽方法

快速排序運用了分治思想 分解 將陣列arr l r 劃分為兩個子陣列arr l p 1 和arr p 1 r 使得arr p 為大小居中的數,即左側arr l p 1 中的每個元素都小於等於它 而右側arr p 1 r 中的每個元素都大於等於它。其中計算下標p也是劃分過程的一部分。解決 通過遞迴呼叫...