Advertisement
BigETI

kurtalgo

Mar 3rd, 2015
291
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.68 KB | None | 0 0
  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include <iostream>
  3. #include <string>
  4. #include <cstring>
  5. #include <thread>
  6. #include <mutex>
  7. #include <list>
  8. #include <cstdint>
  9.  
  10. #define MAX_OBJECTS     (1000)
  11. #define HALF_OBJECTS    (500)
  12.  
  13. std::mutex mtx;
  14.  
  15. int src_objects[MAX_OBJECTS];
  16.  
  17. void UseKurtAlgo(int swap_count, int *objects)
  18. {
  19.     int i, j, t_objects[MAX_OBJECTS];
  20.     for (i = 0; i < (MAX_OBJECTS - swap_count); i++)
  21.     {
  22.         t_objects[2 * i] = objects[swap_count + i];
  23.         t_objects[(2 * i) + 1] = objects[i];
  24.     }
  25.     for (j = (i = MAX_OBJECTS - swap_count); j < swap_count; j++) t_objects[j + i] = objects[j];
  26.     memcpy(objects, t_objects, sizeof(int)*MAX_OBJECTS);
  27. }
  28.  
  29. void threaded_func(int start_objects, int to_objects, FILE *file_handle)
  30. {
  31.     int i, objects[MAX_OBJECTS];
  32.     uint64_t iteration_count;
  33.     memcpy(objects, src_objects, sizeof(int)*MAX_OBJECTS);
  34.     for (i = start_objects; i < to_objects; i++)
  35.     {
  36.         iteration_count = 0;
  37.         do
  38.         {
  39.             UseKurtAlgo(i, objects);
  40.             ++iteration_count;
  41.             //if ((++iteration_count) >= MAX_ITERATIONS) break;
  42.         } while (memcmp(objects, src_objects, sizeof(int)*MAX_OBJECTS));
  43.         mtx.lock();
  44.         std::wcout << L"Objects: " << MAX_OBJECTS << L"; Swap amount: " << i << L"; Iterations needed: " << iteration_count << std::endl;
  45.         fputws(L"Objects: ", file_handle);
  46.         fputws(std::to_wstring(MAX_OBJECTS).c_str(), file_handle);
  47.         fputws(L"; Swap amount: ", file_handle);
  48.         fputws(std::to_wstring(i).c_str(), file_handle);
  49.         fputws(L"; Iterations needed: ", file_handle);
  50.         fputws(std::to_wstring(iteration_count).c_str(), file_handle);
  51.         fputws(L"\r\n", file_handle);
  52.         mtx.unlock();
  53.     }
  54. }
  55.  
  56. int main(int args, char *argv[])
  57. {
  58.     FILE *file_handle = fopen("kurtalgo.txt", "w+,ccs=UTF-8");
  59.     if (file_handle)
  60.     {
  61.         for (int i = 0; i < MAX_OBJECTS; i++) src_objects[i] = i;
  62.         std::thread t1(threaded_func, HALF_OBJECTS + 50, HALF_OBJECTS + 100, file_handle),
  63.             t2(threaded_func, HALF_OBJECTS + 100, HALF_OBJECTS + 150, file_handle),
  64.             t3(threaded_func, HALF_OBJECTS + 150, HALF_OBJECTS + 200, file_handle),
  65.             t4(threaded_func, HALF_OBJECTS + 200, HALF_OBJECTS + 250, file_handle),
  66.             t5(threaded_func, HALF_OBJECTS + 250, HALF_OBJECTS + 300, file_handle),
  67.             t6(threaded_func, HALF_OBJECTS + 300, HALF_OBJECTS + 350, file_handle),
  68.             t7(threaded_func, HALF_OBJECTS + 350, HALF_OBJECTS + 400, file_handle),
  69.             t8(threaded_func, HALF_OBJECTS + 400, HALF_OBJECTS + 450, file_handle),
  70.             t9(threaded_func, HALF_OBJECTS + 450, HALF_OBJECTS + 500, file_handle);
  71.         threaded_func(HALF_OBJECTS, HALF_OBJECTS + 50, file_handle);
  72.         t1.join();
  73.         t2.join();
  74.         t3.join();
  75.         t4.join();
  76.         t5.join();
  77.         t6.join();
  78.         t7.join();
  79.         t8.join();
  80.         t9.join();
  81.         fclose(file_handle);
  82.     }
  83.     return 0;
  84. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement