用非遞迴的方法實現快速排序

2021-06-25 20:36:03 字數 843 閱讀 9537

用遞迴的方法實現的演算法一般都可以用非遞迴,即迴圈,的方法實現。實現的方法一般都需要借助乙個棧。

記待排序陣列為a, 有n個數。本演算法的思路很簡單:

1、先將陣列的尾下標和首下標先後壓入棧s;

2、當s不為空時,從s中先後彈出兩個數front和end,表示待排序的區間。在該區間內使用partion演算法,返回中位數下標mid;

3、當mid-front>=2時,a[front]~a[mid-1]需要進一步排序,將mid-1和front先後入棧;否則不做操作。當rear-mid>=2時,

a[mid+1]~a[rear]需要進一步排序,將rear和mid+1先後入棧;否則不做操作。

4、重複步驟2、3,直到s為空。

**如下:

#include#includeusing namespace std;

int partition(int a, int front, int rear);

int main()

; int n=sizeof(a)/sizeof(a[0]);

stacks;

s.push(n-1);

s.push(0);

int front, rear, mid;

while(!s.empty())

if(rear-mid>=2)

}for(int i=0; i=temp && j>i)

j--;

if(j>i)

while(a[i]<=temp && j>i)

i++;

if(j>i)

}a[i]=temp;

return 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 次比較 都是後半部分元素比前半部大 而不同之處就在於氣泡...