快排:
遞迴實現:
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 ...