- #include <iostream>
- using namespace std;
- int b[10000001];
- void swap(int &a, int &b)
- {
- int temp = a;
- a = b;
- b = temp;
- }
- void bubble_sort(int *arr, int n)
- {
- for (int i = n - 1; i >= 1; i--)
- {
- for (int j = 0; j < i; j++)
- {
- if (arr[j] > arr[j + 1])
- swap(arr[j], arr[j + 1]);
- }
- }
- }
- void insertion_sort(int *arr, int n)
- {
- for (int i = 1; i < n; i++)
- {
- for (int j = i; j >= 1; j--)
- {
- if (arr[j] < arr[j - 1])
- swap(arr[j], arr[j - 1]);
- }
- }
- }
- void selection_sort(int *arr, int n)
- {
- for (int i = 0; i < n - 1; i++)
- {
- int mini = i;
- for (int j = i; j < n; j++)
- {
- if (arr[j] < arr[mini])
- mini = j;
- }
- swap(arr[i], arr[mini]);
- }
- }
- void counting_sort(int *arr, int n)
- {
- int maximum = arr[0];
- for (int i = 1; i < n; i++)
- {
- if (arr[i] > maximum)
- maximum = arr[i];
- }
- int ind = 0;
- int size = maximum + 1;
- int count[size];
- for (int i = 0; i < size; i++)
- count[i] = 0;
- for (int i = 0; i < n; i++)
- count[arr[i]]++;
- for (int i = 0; i < size; i++)
- {
- while (count[i])
- {
- arr[ind++] = i;
- count[i]--;
- }
- }
- }
- void merge(int *arr, int lo, int mid, int hi)
- {
- int curr1 = lo, curr2 = mid + 1;
- int ind = lo;
- while (curr1 <= mid && curr2 <= hi)
- {
- if (arr[curr1] > arr[curr2])
- b[ind++] = arr[curr2++];
- else
- b[ind++] = arr[curr1++];
- }
- while (curr1 <= mid)
- b[ind++] = arr[curr1++];
- while (curr2 <= hi)
- b[ind++] = arr[curr2++];
- for (int i = lo; i <= hi; i++)
- arr[i] = b[i];
- }
- void merge_sort(int *arr, int lo, int hi)
- {
- if (lo == hi)
- return;
- int mid = (lo + hi) / 2;
- merge_sort(arr, lo, mid);
- merge_sort(arr, mid + 1, hi);
- merge(arr, lo, mid, hi);
- }
- void countsort(int *arr,int n,int pos){
- int count[10]={};
- for(int i = 0;i<n;i++)
- count[(arr[i]/pos)]++;
- for(int i = 1;i<10;i++)
- count[i]+=count[i-1];
- for(int i=n-1;i>=0;i--)
- b[--count[(arr[i]/pos)]]=arr[i];
- for(int i=0;i<n;i++)
- arr[i]=b[i];
- }
- void radix_sort(int *arr,int n){
- int maxi = arr[0];
- for(int i=0;i<n;i++)
- if(arr[i]>maxi)maxi=arr[i];
- for(int pos=1;(maxi/pos)>0;pos*=10){
- countsort(arr,n,pos);
- }
- }
- int main()
- {
- int n;
- cin >> n;
- int arr[n];
- for (int i = 0; i < n; i++)
- cin >> arr[i];
- // bubble_sort(arr,n);
- // insertion_sort(arr,n);
- // selection_sort(arr,n);
- // counting_sort(arr,n);
- // merge_sort(arr,0,n-1);
- // radix_sort(arr,n);
- for (int i = 0; i < n; i++)
- cout << arr[i] << " ";
- cout << endl;
- }