快速排序的兩種思路(C 實現)

2021-10-04 11:42:37 字數 1056 閱讀 1377

#includeusing namespace std;

int partition(int array,int startindex,int endindex);

void quicksort(int array,int startindex,int endindex)

//分治(雙邊迴圈法)

int partition(int array,int startindex,int endindex)

//控制left指標比較並右移

while(leftusing namespace std;

int partition(int array,int startindex,int endindex);

void quicksort(int array,int startindex,int endindex)

//單邊迴圈法和雙邊迴圈法的不同體現在partition函式內部。

//單邊迴圈法在開始時和雙邊迴圈法類似,都是首先選定基準元素pivot。同時

//設定乙個mark指標指向數列其實位置,這個mark指標代表小於基準元素的區域邊界

//若遍歷到的元素小於基準元素,則需要做兩件事:第一。mark指標右移1位,因為小於pivot的

//區域邊界增大了1;第二,讓最新遍歷到的元素和mark指標所在位置的元素交換位置,因為最新遍歷的元素

//歸屬於小於pivot的區域。partition函式實現如下:

//分治(單邊迴圈法)

int partition(int array,int startindex,int endindex)

} array[startindex]=array[mark];

array[mark]=pivot;

return mark;

} int main()

; int length=sizeof(array)/sizeof(array[0]);

quicksort(array,0,length-1);

for(int i=0;icout

}

快速排序的兩種思路

選取最左端 low 為基準值,以公升序為例 從右向左 high low 查詢到乙個小於基準值的元素,再從左向右查詢乙個大於基準值的元素,再將兩者相交換。while arr j temp low從右向左 high low 查詢到乙個小於基準值的元素,將兩者相交換,再從左向右查詢乙個大於基準值的元素,再...

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

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

快速排序的兩種實現

快速排序演算法是現在用的最廣的排序演算法,也是效率最高的。它有兩種實現方式,一種是定軸法,另外一種是挖坑法。這裡簡單介紹一下兩種實現方法的思想,並附上c 實現 一 定軸法 1.備份對軸 首記錄 2.取兩個指標left和right,初始值分別是序列的第二個元素和最後乙個元素,並且left right ...