快速排序的非遞迴實現

2021-07-03 02:27:34 字數 694 閱讀 8130

快速排序的非遞迴實現使用了乙個顯示的下推棧

使用向棧中壓入引數和過程呼叫/退出不斷地從棧中彈出引數來替代遞迴呼叫。

把兩個子檔案的較大者壓入棧中。

快速排序的非遞迴實現

#include #include #include "seqstack.h"

typedef int item;

#define exch(a, b)

//定義全域性變數

sequence_stack s;

sequence_stack *p_s = &s;

int partition(item a, int l, int r) //快排劃分,以陣列最有乙個元素作為劃分元素

if(i>=j) break; //外層迴圈的退出條件

exch(a[i], a[j]);

} exch(a[i], a[r]);

return i;

}void quicksort(item a, int l, int r)

else

}}int main(void)

{ int i, n = 50, sw = 1;

int *a = (int *)malloc(n*sizeof(int)); //為資料a分配相應的儲存空間

init(p_s); //順序棧初始化

if (sw)

{ for(i=0; i

快速排序實現(遞迴 非遞迴)

首先是劃分演算法,假設每次都以第乙個元素作為樞軸值,進行一趟劃分 int partition int a,int low,int high a low pivot 將樞軸值元素置於最終位置 return low 第乙個while迴圈裡的 還可以採用如下形式 while low high a high...

快速排序非遞迴實現

再來談談快速排序,遞迴實現與非遞迴實現。遞迴實現是基本的排序 非遞迴實現需要用stack來儲存 low,high 的排序對,一部分一部分的排序。直接上程式了 標頭檔案 quick test.h include include include include include include typed...

快速排序的非遞迴實現

首先說明一下快速排序是對氣泡排序的改進。為什麼這麼說呢?想一下氣泡排序,它把序列分成了兩部分,前半部分無序,後半部分公升序排列,並且後半部分的數都大於前半部的數。由此可得到快速排序和氣泡排序的一些共同點 都要經歷n趟排序 每趟排序要經歷o n 次比較 都是後半部分元素比前半部大 而不同之處就在於氣泡...