- 论坛徽章:
- 0
|
如下代码实现mergesort,- #include <iostream>
- #include <vector>
- using namespace std;
- void merge (vector<int> &arr, int first , int mid, int last, vector<int> &crr)
- {
- int f = first;
- int m = mid + 1;
- int t = 0;
- while (f <= mid && m <= last)
- {
- if (arr[f] < arr[m])
- crr[t++] = arr[f++];
- else
- crr[t++] = arr[m++];
- }
- while (f <= mid)
- crr[t++] = arr[f++];
- while (m <= last)
- crr[t++] = arr[m++];
- for (int i = 0; i < t; ++i)
- arr[first + i] = crr[i];
- }
- void mergeSort (vector<int> &arr, int first, int last, vector<int> &crr)
- {
- int mid = (first + last) / 2;
- while (first < mid)
- {
- mergeSort (arr, first, mid, crr);
- mergeSort (arr, mid + 1, last, crr);
- merge (arr, first, mid, last, crr);
- }
- }
- void mergeSort (vector<int> &arr)
- {
- vector<int> crr (arr.size());
- mergeSort (arr, 0, arr.size() - 1, crr);
- }
- int main ()
- {
- int a[] = {
- 1, 10, 20, 30, 50, 2, 88, 4, 60, 100
- };
- vector<int> arr (a, a + 10);
- mergeSort (arr);
- for (vector<int>::iterator iter = arr.begin(); iter != arr.end(); ++iter)
- cout << *iter << '\t';
复制代码 gdb单步跟踪到调用 mergeSort (arr, 0, arr.size() - 1, crr);
输出如下内容
(gdb) s
std::vector<int, std::allocator<int> >::size (this=0x7fffffffe0d0)
at /usr/lib/gcc/x86_64-redhat-linux/4.4.6/../../../../include/c++/4.4.6/bits/stl_vector.h:533
533 { return size_type(this->_M_impl._M_finish - this->_M_impl._M_start); }
|
|