fork(2) download
  1. //Title of this code
  2.  
  3. #include <iostream>
  4. using namespace std;
  5.  
  6. int map[] =
  7. {
  8. 0, 2, 3, 2, 0,
  9. 0, 1, 4, 0, 1,
  10. 1, 2, 2, 0, 3,
  11. 2, 1, 0, 0, 4,
  12. 4, 3, 1, 1, 3
  13. };
  14.  
  15. void mergeSortBlock(int *a, int index1, int index2, int size, int transparent);
  16. void mergeSort(int *a, int indexFront,int indexEnd, int transparent);
  17. void printMap();
  18.  
  19. int main()
  20. {
  21. int size = sizeof(map) / sizeof(map[0]);
  22.  
  23. cout << "size = " << size << std::endl;
  24.  
  25.  
  26. cout << "before\n";
  27. printMap();
  28.  
  29. mergeSort(map,0, size, 0);
  30.  
  31. cout << "after\n";
  32. printMap();
  33.  
  34. return 0;
  35.  
  36. }
  37.  
  38. void mergeSortBlock(int *a, int index1, int index2, int size, int transparent)
  39. {
  40. int *result;
  41. int resultIndex = 0;
  42. int mergeIndex1 = index1;
  43. int mergeIndex2 = index2;
  44.  
  45. result = new int [size*2];
  46.  
  47. while (mergeIndex1 <= (index1 + size -1) && mergeIndex2 <= (index2 + size -1)){
  48. if (a[mergeIndex2] == transparent) { // check the transparency
  49. result[resultIndex] = a[mergeIndex2];
  50. resultIndex++;
  51. mergeIndex2++;
  52. }
  53. else {
  54. result[resultIndex] = a[mergeIndex1];
  55. resultIndex++;
  56. mergeIndex1++;
  57. }
  58. }
  59.  
  60. if (mergeIndex2 <= (index2 + size - 1)) {
  61. for (int i = mergeIndex2 ; i< (index2 + size); i++) {
  62. result[resultIndex] = a[mergeIndex2];
  63. resultIndex++;
  64. mergeIndex2++;
  65. }
  66. }
  67. else{
  68. for (int i = mergeIndex1 ; i< (index1 + size); i++) {
  69. result[resultIndex] = a[mergeIndex1];
  70. resultIndex++;
  71. mergeIndex1++;
  72. }
  73. }
  74.  
  75. // copy the result back
  76. for (int i=0; i < size*2; i++) {
  77. a[index1+i] = result[i];
  78. }
  79. delete [] result;
  80. }
  81.  
  82.  
  83. void mergeSort(int *a, int indexFront,int indexEnd, int transparent){
  84. int size = (indexEnd - indexFront +1)/2;
  85. if (size > 1){
  86. mergeSort(a, indexFront, indexFront + size - 1, transparent);
  87. mergeSort(a, indexFront + size, indexEnd, transparent);
  88. }
  89. mergeSortBlock(a, indexFront, indexFront + size, size, transparent);
  90. }
  91.  
  92. void printMap()
  93. {
  94. for (int row = 0;row < 5; ++row)
  95. {
  96. for (int col = 0;col < 5; ++col)
  97. {
  98. cout << map[5 * row + col] << '\t';
  99. }
  100. cout << endl << endl << endl << endl;
  101. }
  102. }
Success #stdin #stdout 0s 3428KB
stdin
Standard input is empty
stdout
size = 25
before
0	2	3	2	0	



0	1	4	0	1	



1	2	2	0	3	



2	1	0	0	4	



4	3	1	1	3	



after
0	0	0	0	0	



2	3	2	0	1	



4	0	1	1	2	



2	3	2	1	0	



4	4	3	1	1