ソート関連アルゴリズム-2



  
  
  
  
  1. void Disp2(int iarr[], int length) 
  2.     for(int loop1 = 0; loop1 < length; ++loop1) 
  3.         cout<<iarr[loop1]<<' '
  4.     cout<<endl; 
  5.  
  6.  
  7. void InsertSort2(int iarr[], int length) 
  8.     int loop1 = 0, loop2 = 0, temp = 0; 
  9.      
  10.     for(loop1 = 1; loop1 < length; ++loop1) 
  11.     { 
  12.         temp  = iarr[loop1]; 
  13.         loop2 = loop1 - 1; 
  14.         while(loop2 >= 0)        
  15.             if(iarr[loop2] > temp) 
  16.             {    iarr[loop2 + 1] = iarr[loop2]; --loop2;} 
  17.             else break
  18.          
  19.         iarr[loop2 + 1] = temp; 
  20.     } 
  21.  
  22. void ShellSort2(int iarr[], int length) 
  23.     int loop1 = 0, loop2 = 0, temp = 0,gap = length / 2; 
  24.  
  25.     while(gap > 0) 
  26.     { 
  27.         for(loop1 = gap; loop1 < length; ++loop1) 
  28.         { 
  29.             temp  = iarr[loop1]; 
  30.             loop2 = loop1 - gap; 
  31.             while(loop2 >= 0 && iarr[loop2] > temp) 
  32.             { 
  33.                 iarr[loop2 + gap] = iarr[loop2]; 
  34.                 loop2 = loop2 - gap; 
  35.             } 
  36.             iarr[loop2 + gap] = temp; 
  37.         } 
  38.         gap = gap / 2; 
  39.     } 
  40.  
  41. void SelectSort2(int iarr[], int length) 
  42.     int loop1 = 0, loop2 = 0, temp = 0, tempval = 0; 
  43.      
  44.     for(loop1 = 0; loop1 < length; ++loop1) 
  45.     { 
  46.         temp = loop1; 
  47.         for(loop2 = loop1 + 1; loop2 < length; ++loop2) 
  48.         { 
  49.             if(iarr[loop2] < iarr[temp]) 
  50.                 temp = loop2; 
  51.         } 
  52.         if(temp != loop1) 
  53.         { 
  54.             tempval = iarr[temp]; 
  55.             iarr[temp] = iarr[loop1]; 
  56.             iarr[loop1] = tempval; 
  57.         } 
  58.     } 
  59.  
  60.  
  61.  
  62. void Sift2(int iarr[], int low, int high) 
  63.     int lowval = low, highval = high, temp = 0,  ivar1 = 0; 
  64.      
  65.     temp  = iarr[lowval]; 
  66.     while(lowval <= highval)                             //  lowval <= highval,   lowval * 2 <= highval  ,   
  67.     {        
  68.         ivar1 = lowval * 2; 
  69.         if(ivar1 > highval) break;                      //  
  70.         if( ivar1 + 1 <= highval && iarr[ivar1] < iarr[ivar1 + 1]) 
  71.             ++ivar1; 
  72.         if(temp < iarr[ivar1]) 
  73.         { 
  74.             iarr[lowval] = iarr[ivar1]; 
  75.             lowval = ivar1; 
  76.         }else                
  77.             break;       
  78.     } 
  79.     iarr[lowval] = temp; 
  80.  
  81. void Sift3(int iarr[], int low, int high) 
  82.     int lvar = 0, hvar = 0, tempvar = 0, temp = 0; 
  83.  
  84.     lvar = low, tempvar = lvar * 2;  hvar = high;  temp = iarr[low]; 
  85.     while(tempvar <= hvar) 
  86.     { 
  87.         if(tempvar + 1 <= hvar && iarr[tempvar] < iarr[tempvar + 1]) 
  88.             ++tempvar; 
  89.         if(temp < iarr[tempvar]) 
  90.         { 
  91.             iarr[lvar] = iarr[tempvar]; 
  92.             lvar = tempvar; 
  93.             tempvar = lvar * 2; 
  94.         }else break
  95.     } 
  96.     iarr[lvar] = temp; 
  97.  
  98. void HeapSort22(int iarr[], int length) 
  99.     int loop1 = 0, loop2 = 0, temp = 0; 
  100.  
  101.     for(loop1 = length / 2; loop1 > 0; --loop1) 
  102.         Sift3(iarr, loop1, length); 
  103.     for(loop1 = length; loop1 > 1; --loop1) 
  104.     { 
  105.         temp = iarr[loop1]; 
  106.         iarr[loop1] = iarr[1]; 
  107.         iarr[1] = temp; 
  108.         Sift3(iarr, 1, loop1 - 1); 
  109.     } 
  110.  
  111. void BubbleSort2(int iarr[], int length) 
  112.     int loop1 = 0, loop2 = 0, temp = 0, exchange = 0; 
  113.  
  114.     for(loop1 = 0; loop1 < length; ++loop1) 
  115.     {   exchange = 0; 
  116.         for(loop2 = length -1; loop2 > loop1; --loop2) 
  117.         { 
  118.             if(iarr[loop2] < iarr[loop2 - 1]) 
  119.             { 
  120.                 temp = iarr[loop2]; 
  121.                 iarr[loop2] = iarr[loop2 - 1]; 
  122.                 iarr[loop2 -1] = temp; 
  123.                 exchange = 1; 
  124.             } 
  125.         } 
  126.         if(exchange == 0) return
  127.     } 
  128.  
  129. void QuickSort22(int iarr[], int begin, int end) 
  130.     int loop1 = 0, loop2 = 0, temp = 0; 
  131.     temp = iarr[begin]; 
  132.  
  133.     loop1 = begin; loop2 = end; 
  134.     if(begin >= end) return
  135.     while(loop1 < loop2) 
  136.     { 
  137.         while(loop2 > loop1 && iarr[loop2] > temp) 
  138.             --loop2; 
  139.         if(loop2 > loop1) 
  140.         { 
  141.             iarr[loop1] = iarr[loop2]; 
  142.             ++loop1; 
  143.         } 
  144.         while(loop1 < loop2 && iarr[loop1] < temp) 
  145.             ++loop1; 
  146.         if(loop1 < loop2) 
  147.         { 
  148.             iarr[loop2] = iarr[loop1]; 
  149.             --loop2; 
  150.         } 
  151.     } 
  152.     iarr[loop1] = temp; 
  153.     QuickSort22(iarr, begin, loop1 -1); 
  154.     QuickSort22(iarr, loop1 + 1,end); 
  155.  
  156.  
  157.  
  158. void Merge2(int iarr[],int begin, int mid, int end) 
  159.     int loop1 = begin, loop2 = mid + 1, temp = 0, index = 0; 
  160.     int tempiarr[30]; 
  161.  
  162.     while(loop1 <= mid && loop2 <= end) 
  163.     { 
  164.         if(iarr[loop1] > iarr[loop2]) 
  165.         { 
  166.             tempiarr[index] = iarr[loop2]; 
  167.             ++index;    ++loop2; 
  168.         }else if(iarr[loop1] < iarr[loop2]) 
  169.         { 
  170.             tempiarr[index] = iarr[loop1]; 
  171.             ++index;    ++loop1; 
  172.         }else 
  173.         { 
  174.             tempiarr[index] = iarr[loop1]; 
  175.             ++index;    ++loop1; 
  176.             tempiarr[index] = iarr[loop2]; 
  177.             ++index;    ++loop2; 
  178.         } 
  179.     } 
  180.     while(loop1 <= mid) 
  181.     { 
  182.         tempiarr[index] = iarr[loop1]; 
  183.         ++index;   ++loop1; 
  184.     } 
  185.     while(loop2 <= end) 
  186.     { 
  187.         tempiarr[index] = iarr[loop2]; 
  188.         ++index;   ++loop2; 
  189.     } 
  190.     for(loop1 = 0; loop1 < index; ++loop1) 
  191.         iarr[loop1] = tempiarr[loop1];       
  192.  
  193. void MergePass2(int iarr[], int len, int length) 
  194.     int ivar = 0; 
  195.     for(ivar = 0; ivar + len * 2 - 1 <= length; ivar = ivar + 2 * len) 
  196.     { 
  197.         Merge2(iarr, ivar, ivar + len - 1, ivar + 2 * len - 1); 
  198.          
  199.     } 
  200.     if(ivar + len - 1 < length) 
  201.     { 
  202.         Merge2(iarr, ivar, ivar + len -1, length); 
  203.     } 
  204.  
  205. void MergeSort2(int iarr[], int length) 
  206.     int len = 1; 
  207.     for(len = 1; len <= length; len = 2 * len) 
  208.     {   MergePass2(iarr, len, length );  } 

 


   
   
   
   
  1. void main() 
  2.     Node *nodes = NULL; 
  3.     int iarr[16] = {1,18,7,30,9,15,99,36,9,12,25,11,2,16,17,10}; 
  4.     char carr[10][4] = {"123","345","568","126","455","987","356","678","387","438"}; 
  5. //  Disp(iarr,6); 
  6. //  InsertSort(iarr,6); 
  7. //  ShellSort(iarr,6); 
  8.      
  9. /*  CreateList(nodes,iarr,6); 
  10.     Disp(nodes);    
  11.     InsertSort2(nodes); 
  12.     Disp(nodes);*/ 
  13. //  Disp(carr,10); 
  14. //  SelectSort2(iarr,6); 
  15. //  HeapSort2(iarr,7); 
  16. //  BubbleSort(iarr,8); 
  17. //  QuickSort(iarr,0,8); 
  18. //  DBubble2 (iarr,10); 
  19. //  QuickSort2(iarr,0,12); 
  20. //  Partition(iarr,0,11);     
  21. //  MergeSort(iarr,14); 
  22. //  RadixSort(carr,10,3); 
  23. //  Disp(carr,10); 
  24.       
  25.   
  26. //  cout<<"is small heap: "<<isSmallHeap(iarr,7)<<endl; 
  27.  
  28.     Disp2(iarr,16); 
  29. //  InsertSort2(iarr,15); 
  30. //  ShellSort2(iarr,15); 
  31. //  SelectSort2(iarr,15); 
  32. //  HeapSort22(iarr,14); 
  33. //  BubbleSort2(iarr,15); 
  34. //  QuickSort22(iarr, 0, 15); 
  35.     MergeSort(iarr,15); 
  36.   
  37.     Disp2(iarr,16);