Sort template

The following quicksorts do not know how to submit a bug on luogu. If you see it, please file a bug for me, thank you.

  1 #include<iostream>
  2 #include<cstdio>
  3 #include<cstring>
  4 #include<algorithm>
  5 #include<cmath>
  6 #include<cstdlib>
  7 #include<ctime>
  8 using namespace std;
  9 
 10 int a[100007];
 11 int b[100];
 12 int ans;
 13 
 14 void bubble_sort(int *a, int l, int r, int n)
 15 {
 16     for (int i = 1; i < n; i++)
 17     {
 18         for (int j = l; j < r; j++)
 19         {
 20             if (a[j] > a[j + 1]) swap(a[j], a[j + 1]);
 21         }
 22     }
 23 }//冒泡排序 
 24 
 25 void merge_sort(int *a, int l, int r)
 26 {
 27     if (l == r) return;
 28     int mid = (l + r) >> 1;
 29     merge_sort(a, l, mid);
 30     merge_sort(a, mid + 1, r);
 31     
 32     int i = l, j = mid + 1;
 33     //b:辅助数组 
 34     for (int k = l; k <= r; k++)
 35     {
 36         if (j > r || (i <= mid && a[i] < a[j]))
 37         {
 38             b[k] = a[i];
 39             i++;
40              ans += j - (mid + 1 );
 41          }
 42          else 
43          {
 44              b[k] = a[j];
 45              j++ ;
 46          }
 47      }
 48      for ( int k = l; k <= r; k++ )
 49          a[k] = b[k];
 50 } // merge sort and reverse order pair 
51              
52  
53  void quick_sort( int *a, int l, int r)
 54 {
 55      swap(a[l], a[rand()*rand() % (r -l + 1 ) + l]);
 56      int tmp = a[l];
 57      int l_ = l, r_ = r;
 58      while (l < r)
 59      {
 60          while (l < r) 
 61          {
 62              if (a[r] > tmp) r--; // a[r] is in the correct position 
63              else 
64              {
 65                  a[ l] = a[r];
 66                  l++ ;
 67                  break ;
68              }
 69          }
 70          while (l < r) 
 71          {
 72              if (a[l] < tmp) l++; // a[l] falls in the correct position 
73              else 
74              {
 75                  a[r] = a[l] ;
 76                  r-- ;
 77                  break ;
 78              }
 79          }
 80      }
 81      a[l] = tmp;
 82      if (l - l_ > 1 ) quick_sort(a, l_, l - 1);
 83     if (r_ - r > 1) quick_sort(a, r + 1, r_);
 84 }//快排 
 85 
 86 int quick_select(int *a, int l, int r, int k)
 87 {
 88     swap(a[l], a[rand()*rand() % (r -l + 1) +l]);
 89     int tmp = a[l];
 90     int l_ = l, r_ = r;
 91     while (l < r)
 92     {
 93         while(l < r) 
 94          {
 95              if (a[r] > tmp)r-- ; // a[r] falls in the correct position 
96              else 
97              {
 98                  a[l] = a[r];
 99                  l++ ;
 100                  break ;
 101              }
 102          }
 103          while (l < r) 
 104          {
 105              if (a[l] < tmp) l++; // a[l] is in the correct position 
106              else 
107              {
 108                 a[r] = a[l];
109                 r--;
110                 break;
111             }
112         }
113     }
114     a[l] = tmp;
115     if (k == l - l_ + 1) return a[l];
116     if (k < l - l_ + 1) return quick_select(a, l_, l - 1, k);
117     if (k > l - l_ + 1) return quick_select(a, r + 1, r_, k - (l - l_ + 1));
 118 } // find the K-th largest number 
119      
120      
121  
122  int main()
 123  {
 124      
125      int n;
 126      cin>> n;
 127      srand(time( 0 ));
 128      
129      for ( int i = 0 ; i < n; i++ )
 130          // a[i] = rand(); 
131          cin >> a[i];
 132          
133      // bubble_sort(a, 0, n - 1, n); 
134      quick_sort(a , 0 , n -1);
135     //int k = 5;
136     //cout << quick_select(a, 0, n -1, k) << endl;
137     //merge_sort(a, 0, n - 1);
138     for (int i = 0; i < n; i++)
139         cout << a[i] << ' ';
140     //cout << ans << endl;
141     cout << endl;
142     return 0;
143 }

 

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=325378542&siteId=291194637