CSDN博客

img Tuzki

归并排序(merge sort)源码

发表于2008/9/30 21:06:00  538人阅读

 
  1. #include <iostream>
  2. using namespace std;
  3. void merge(int ia[], int p, int q, int r)
  4. {
  5.     int n1 = q - p + 1;     // n1 = [p, q]
  6.     int n2 = r - q;         // n2 = (q, r]
  7.     int ia1[n1];
  8.     int ia2[n2];
  9.     for(int i=0; i<n1; i++)
  10.     {
  11.         ia1[i] = ia[p+i];
  12.     }
  13.     ia1[n1] = 0x7FFFFFFF;   // sentinel
  14.     for(int i=0; i<n2; i++)
  15.     {
  16.         ia2[i] = ia[q+1+i];
  17.     }
  18.     ia2[n2] = 0x7FFFFFFF;   // sentinel
  19.     
  20.     int i, j, k;
  21.     i = j = 0;
  22.     k = p;
  23.     
  24.     while( k <= r )
  25.     {
  26.         if( ia1[i]<=ia2[j] )
  27.         {
  28.             ia[k] = ia1[i];
  29.             i++;
  30.         }
  31.         else
  32.         {
  33.             ia[k] = ia2[j];
  34.             j++;
  35.         }
  36.         k++;
  37.     }
  38. }
  39. void MergeSort(int ia[], int p, int q)
  40. {
  41.     if(q > p)
  42.     {
  43.         int r = (p+q)/2;
  44.         MergeSort(ia, p, r);
  45.         MergeSort(ia, r+1, q);
  46.         merge(ia, p, r, q);
  47.     }
  48. }
  49. int main()
  50. {
  51.     int ia[6] = {6,5,4,3,2,1};
  52.     MergeSort(ia, 0, 5);
  53.     for(int i=0; i<6; i++)
  54.     {
  55.         cout << ia[i] << endl;
  56.     }
  57. }
0 0

相关博文

我的热门文章

img
取 消
img