Advertisement
yukisaw

One million ints sort (upd) in 0.35 sec

Jun 12th, 2015
226
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.92 KB | None | 0 0
  1. #include <iostream>
  2. #include <iomanip>
  3. #include <ctime>
  4. using namespace std;
  5. template <typename T>
  6. struct list
  7. {
  8.     list<T> *b;
  9.     list<T> *s;
  10.     T val;
  11.     unsigned int count;
  12. };
  13. template <typename T>
  14. void sort(T *inf, unsigned int size, list<T> **t)
  15. {
  16.     if ((*t) == NULL)
  17.     {
  18.         (*t) = new list<T>;
  19.         (*t)->val = inf[0];
  20.         (*t)->b = NULL;
  21.         (*t)->s = NULL;
  22.         (*t)->count = 1;
  23.     }
  24.     else if (inf[0] < (*t)->val) sort(&inf[0], 0, &(*t)->s);
  25.     else if (inf[0] == (*t)->val) (*t)->count++;
  26.     else                        sort(&inf[0], 0, &(*t)->b);
  27.     for (; size>1; size--)
  28.     {
  29.         sort(&inf[size - 1], 0, t);
  30.         if (size == 2)
  31.         {
  32.             unsigned int offset = 0;
  33.             show_up(&inf[0], *t, offset);
  34.         }
  35.     }
  36. }
  37. template <typename T>
  38. void show_up(T *inf, list<T> *t, unsigned int &offset)
  39. {
  40.  
  41.     if (t->s != NULL) {
  42.         show_up(&inf[0], t->s, offset);
  43.         delete t->s;  }
  44.     while (t->count--) { inf[offset] = t->val; offset++; }
  45.     if (t->b != NULL)    { 
  46.             show_up(&inf[0], t->b, offset);
  47.             delete t->b; }
  48.     return;
  49. }
  50.  
  51. int v=1000000; list<int> *f = NULL;
  52. unsigned int offset = 0, n, c;
  53. int main()
  54. {
  55.     setlocale(LC_ALL, "Russian");
  56.     //system("mode con cols=64 lines=59");
  57.     system("pause >> void");
  58.     c = clock();
  59.     int *i = (int*)malloc(v*sizeof(int));
  60.     for (n = 0; n<v; n++) i[n] = rand();
  61.     cout << "На генерацию массива в 1 000 000 элементов типа int затрачено " <<clock()-c << " мс." << endl;
  62.     system("pause>>void");
  63.     cout << "Сортировка." << endl;
  64.     c = clock();
  65.     sort(&i[0], v, &f);
  66.     free(f); f = NULL;
  67.     cout << endl<<"На сортировку массива в 1 000 000 элементов типа int затрачено " << clock() - c << " мс." << endl;
  68.     system("pause>>void");
  69.     for (int s = 0; s < v; s++)
  70.     {
  71.         cout <<left <<setw(8) << i[s];
  72.     }
  73.     free(i);
  74.     system("pause>>void");
  75.     return 0;
  76. }
  77. //---------------------------------------------------------------------------
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement