插排的遞迴和非遞迴實現

2021-09-30 10:47:11 字數 540 閱讀 1786

插排的非遞迴很簡單,用兩層迴圈即可搞定,因此時間複雜度為o(n^2),空間複雜度為o(1)。

**如下:

void insertsort(int* parr, int len)

parr[j+1] = key;

}}

插排遞迴實現,可以呼叫自身n-1次,找到之後n-1個元素的正確位置插入進去,時間複雜度也是o(n^2),空間複雜度為o(n)。

**如下:

//將parr陣列中的第index位元素放入到其已排好序的陣列中,陣列總長度為len

void insertsortrecursion(int* parr, int index, int len)

parr[i+1] = key; //將key放入正確的位置

insertsortrecursion(parr, index+1, len);

}}

個人觀點:

不建議使用遞迴寫插排,之所以去實現是因為筆試中,要求寫插排遞迴實現。

快排非遞迴實現

int partition int arr,int low,int high arr low pivot return low void non recursive qsort int arr,int low,int high if high pivot 1 其實就是用棧儲存每乙個待排序子串的首尾元...

快排的遞迴和非遞迴版本

1 算導版本 偽 2 前後依次覆蓋版本 include include include include includeusing namespace std 把陣列分為兩部分,軸pivot左邊的部分都小於軸右邊的部分 template int partition vector vec,int low...

非遞迴快排

通過使用棧來模擬函式棧的呼叫,每次將首尾指標存入到棧中,並對首尾之間區域進行快排。include include include using namespace std 利用棧將序列的起始和末尾儲存起來 int partition vector v,int s,int e swap v s v i ...