Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- #define FOR(i,a,b) for(i=a;i<=b;i++)
- #define FOD(i,a,b) for(i=a;i>=b;i--)
- int n;
- bool Greater(int a, int b)
- {
- return (a>b);
- }
- bool Lesser(int a, int b)
- {
- return (a<b);
- }
- void input(int *a, int n)
- {
- int i;
- for(i=0;i<=n-1;i++)
- cin>>*(a+i);
- return;
- }
- void output(int *a, int n)
- {
- int i;
- for(i=0;i<=n-1;i++) cout<<*(a+i)<<" ";
- cout<<endl;
- return;
- }
- void insert(int *a, int *n, int k, int val)
- {
- int i;
- for(i=*n;i>=k-1;i--)
- *(a+i+1)=*(a+i);
- *(a+k-1)=val;
- (*n)++;
- return;
- }
- void del(int *a, int *n, int k)
- {
- int i;
- for(i=k-1;i<=(*n)-2;i++)
- *(a+i)=*(a+i+1);
- delete(*(a+*n-1));
- (*n)--;
- return;
- }
- void SWAP(int *a, int *b)
- {
- int x=*a;
- *a=*b;
- *b=x;
- }
- void BubbleSort(int *a, int n, bool (*cmp)(int,int))
- {
- int i,j;
- for(i=0;i<=n-2;i++)
- for(j=n-1;j>=i+1;j--)
- if(cmp(*(a+j),*(a+i)))
- {
- SWAP(a+i,a+j);
- }
- return;
- }
- void SelectionSort(int *a,int n, bool (*cmp)(int,int))
- {
- int i,j;
- for(i=0;i<=n-2;i++)
- for(j=i+1;j<=n-1;j++)
- if (cmp(*(a+j),*(a+i)))
- {
- SWAP(a+i,a+j);
- }
- return;
- }
- void InsertionSort(int *a,int n,bool (*cmp)(int,int))
- {
- int i,j;
- for(i=1;i<=n-1;i++)
- for(j=i;j>=1;j--)
- if (cmp(*(a+j),*(a+j-1)))
- {
- SWAP(a+j,a+j-1);
- }
- return;
- }
- void ShellSort(int *a, int n, bool(*cmp)(int,int))
- {
- int i,j,tmp;
- int dis=n/2;
- while (dis>0)
- {
- for(i=dis;i<=n-1;i++)
- {
- tmp=*(a+i);
- for(j=i; j>= dis&& cmp(tmp,*(a+j-dis)); j-=dis)
- *(a+j)=*(a+j-dis);
- *(a+j)=tmp;
- }
- dis/=2;
- }
- return;
- }
- void Mergesort(int *a, int l, int r ,int *b, bool (*cmp)(int,int))
- {
- int i,j,k,m;
- if (r!=l)
- {
- m=(r+l)/2;
- Mergesort(a,l,m,b,cmp);
- Mergesort(a,m+1,r,b,cmp);
- for(i=m; i>=l;i--) *(b+i)=*(a+i);
- for(j=m+1;j<=r;j++) *(b+r+m+1-j)=*(a+j);
- i++;
- j--;
- for(k=l;k<=r;k++) //
- if (cmp(*(b+i),*(b+j)))
- {*(a+k)=*(b+i); i++;}
- else
- {*(a+k)=*(b+j); j--;}
- }
- return;
- }
- void Quick_sort(int *a, int l, int r,bool (*cmp)(int, int))
- {
- int key = *(a + (l + r) / 2);
- int i,j;
- i=l;
- j=r;
- while (i <= j)
- {
- while (!cmp( key,*(a + i)) && *(a + i) != key) i++;
- while (cmp(key,*(a + j))) j--;
- if (i <= j)
- {
- SWAP(a+i,a+j);
- i++;
- j--;
- }
- }
- if (l<i) Quick_sort(a, l, j,cmp);
- if (i<r) Quick_sort(a, i, r,cmp);
- }
- void inarr2dim(int **a,int n,int m)
- {
- int i,j;
- for(i=0;i<=n-1;i++)
- for(j=0;j<=m-1;j++)
- cin>>*(*(a+i)+j);
- return;
- }
- void outarr2dim(int **a,int n, int m)
- {
- int i,j;
- for(i=0;i<=n-1;i++)
- {
- for(j=0;j<=m-1;j++)
- cout<<*(*(a+i)+j)<<" ";
- cout<<endl;
- }
- return;
- }
- int LinearSearch(int *a, int n, int val)
- {
- int i;
- for(i=0;i<=n-1;i++)
- if (a[i]==val) return i;
- return -1;
- }
- int BinSearch(int *a, int l,int r, int val)
- {
- int mid,res;
- res=-1;
- while (l<=r)
- {
- mid=(l+r)/2;
- //cout<<mid<<" "<<a[mid]<<endl;
- if (*(a+mid)==val) return mid;
- if (*(a+mid)>val) r=mid-1;
- else l=mid+1;
- }
- return res;
- }
- int InterpolationSearch(int *a, int l, int r, int val)
- {
- return;
- }
- int main(){
- cin>>n;
- int *a,*b;
- a=new int [n];
- b=new int [n];
- input(a,n);
- /*
- insert(a,&n,3,100);
- del(a,&n,1);
- Mergesort(a,0,n-1,b,Lesser);
- output(a,n);
- Quick_sort(a,0,n-1,Greater);
- output(a,n);
- SelectionSort(a,n,Greater);
- output(a,n);
- BubbleSort(a,n,Greater);
- output(a,n);
- InsertionSort(a,n,Greater);
- output(a,n);
- ShellSort(a,n,Greater);
- output(a,n);
- cout<<LinearSearch(a,n,5);
- cout<<BinSearch(a,0,n,5);
- */
- // output(a,n);
- //SelectionSort(a,n,Greater);
- //output(a,n);
- Mergesort(a,0,n-1,b,Greater);
- output(a,n);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement