- #include <iostream>
- using namespace std;
- void merge(int ia[], int p, int q, int r)
- {
- int n1 = q - p + 1; // n1 = [p, q]
- int n2 = r - q; // n2 = (q, r]
- int ia1[n1];
- int ia2[n2];
- for(int i=0; i<n1; i++)
- {
- ia1[i] = ia[p+i];
- }
- ia1[n1] = 0x7FFFFFFF; // sentinel
- for(int i=0; i<n2; i++)
- {
- ia2[i] = ia[q+1+i];
- }
- ia2[n2] = 0x7FFFFFFF; // sentinel
- int i, j, k;
- i = j = 0;
- k = p;
- while( k <= r )
- {
- if( ia1[i]<=ia2[j] )
- {
- ia[k] = ia1[i];
- i++;
- }
- else
- {
- ia[k] = ia2[j];
- j++;
- }
- k++;
- }
- }
- void MergeSort(int ia[], int p, int q)
- {
- if(q > p)
- {
- int r = (p+q)/2;
- MergeSort(ia, p, r);
- MergeSort(ia, r+1, q);
- merge(ia, p, r, q);
- }
- }
- int main()
- {
- int ia[6] = {6,5,4,3,2,1};
- MergeSort(ia, 0, 5);
- for(int i=0; i<6; i++)
- {
- cout << ia[i] << endl;
- }
- }
归并排序(merge sort)源码
最新推荐文章于 2019-01-17 08:54:12 发布