https://www.geeksforgeeks.org/alternative-sorting/
Given an array of integers, print the array in such a way that the first element is first maximum and second element is first minimum and so on.
Examples :
Input : arr[] = {7, 1, 2, 3, 4, 5, 6} Output : 7 1 6 2 5 3 4
Input : arr[] = {1, 6, 9, 4, 3, 7, 8, 2} Output : 9 1 8 2 7 3 6 4
An efficient solution involves following steps.
//https://www.geeksforgeeks.org/alternative-sorting/
#include <bits/stdc++.h>
using namespace std;
int merge(int a[], int l, int m, int r){
int n1 = m-l+1, n2 = r-m;
int b[n1],c[n2];
memcpy(b,a+l,n1*sizeof(int));
memcpy(c,a+m+1,n2*sizeof(int));
int i = 0, j = 0, k = l;
while(i<n1 && j < n2){
if (b[i] < c[j])
a[k++] = b[i++];
else
a[k++] = c[j++];
}
while (i < n1)
a[k++] = b[i++];
while (j < n2)
a[k++] = c[j++];
}
int mergesort(int a[], int l, int r){
if(r>l){
int m = (l+r)/2;
mergesort(a,l,m);
mergesort(a,m+1,r);
merge(a, l,m,r);
}
}
int main(){
int n;
cout<<"Enter the no.of elements:";
cin>>n;
int a[n];
cout<<"Enter the elements:";
for (int i=0;i<n;i++)
cin>>a[i];
int c=0,b=n-1;
mergesort(a,0,n-1);
for (int i=0;i<n;i++)
cout<<a[i]<<" ";
cout<<endl;
int i = 0, j = n-1;
while (i < j) {
cout << arr[j--] << " ";
cout << arr[i++] << " ";
}
if (n % 2 != 0)
cout << arr[i];
}