快速排序和歸併排序的遞迴實現和非遞迴實現

2021-10-05 05:44:30 字數 1532 閱讀 5867

快排:

遞迴實現:

int

partion

(vector<

int>

& v,

int low,

int high)

while

(low < high && v[low]

<= key)

//找到第乙個大於key的數v[i],放入v[j]中,同時v[i]為空,待放入資料

++low;

if(low < high)

} v[low]

= key;

//此時i==j,v[i]為空,放入key

return low;

}void

quick_sort

(vector<

int>

& v,

int low,

int high)

}void

qsort

(vector<

int>

& v)

非遞迴解法(棧):

void

quick_sort_norecusive

(vector<

int>

& array,

int left,

int right)if(

(index +1)

< right)

//若index == right或index==right-1,說明已有序,不必再排序

}}

歸併排序:

遞迴方式:

void

merge

(vector<

int>

& v,

int left,

int mid,

int right)

while

(i <= mid)

temp[k++

]= v[i++];

while

(j <= right)

temp[k++

]= v[j++];

for(

int a =

0;a < len;

++a)

v[left+a]

= temp[a]

;delete

temp;

}void

_merge_sort

(vector<

int>

& v,

int left,

int right)

}void

merge_sort

(vector<

int>

& v)

非遞迴實現

void

_merge_sort_norecursive

(vector<

int>

& v)

len *=2

;}}

排序 歸併排序 遞迴和非遞迴實現

歸併排序的遞迴實現 import math 遞迴實現 defmerge sort arr if len arr 2 return arr middle math.floor len arr 2 left,right arr 0 middle arr middle return merge merge...

歸併排序和快速排序

歸併排序 先將問題分解為小問題即乙個個子序列,再將子串行按順序合併。class mergesort mergesort a,0 a.length 1 for int t a public static void mergesort int a,int m,int n public static vo...

歸併排序和快速排序

歸併排序的陣列排序任務可以如下完成 1 把前一半排序 2 把後一半排序 3 把兩半歸併到乙個新的有序陣列,然後再拷貝回原陣列,排序完成。include using namespace std void merge int a,int s,int m,int e,int tmp while p1 m ...