Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //qsort
- #include<iostream>
- #include <bits/stdc++.h>
- #include<cstdlib>
- #include<ctime>
- using namespace std;
- int m,l,p,t[1000005],n;
- void qsorcik(int l, int p)
- {
- int m=l;
- for(int i=l+1;i<=p;i++)
- {
- if(t[i]<=t[l])
- {
- swap(t[++m],t[i]);
- }
- }
- swap(t[l],t[m]);
- if(m-1-l>0)qsorcik(l, m-1);
- if(p-m-1>0)qsorcik(m+1, p);
- }
- void losuj()
- {
- srand(time(NULL));
- for(int i=0;i<20;i++)
- {
- t[i]=rand()%50+10;
- }
- }
- int main()
- {
- losuj();
- for(int i=0;i<20;i++)
- {
- cout<<t[i]<<' ';
- }
- cout<<endl;
- qsorcik(0,19);
- for(int i=0;i<20;i++)
- {
- cout<<t[i]<<' ';
- }
- }
- //hipik
- //
- // main.cpp
- // Sortowanie przez kopcowanie Heap Sort
- //
- // Created by andy on 22.11.2017.
- // Copyright © 2017 andy. All rights reserved.
- //
- #include <cstdio>
- #include <algorithm>
- const int MXN=1e6+5;
- int tablica[MXN],n,a,wynik[MXN];
- void przywruc(int index1){
- int lewa=2*index1,prawa=2*index1+1;//lewy index syna 2x prawy index syna 2x+1
- int maximum=index1;
- if(tablica[lewa]>tablica[maximum]&&lewa<=n)//jezeli lewy syn jest mniejszy ojciec to bede go rozpatrywal
- maximum=lewa;
- if(tablica[prawa]>tablica[maximum]&&prawa<=n)//jezeli prawy syn jest mniejszy ojciec to bede go rozpatrywal
- maximum=prawa;
- if(maximum>index1){//jezeli nie wyszedl poza tablice to ide dalej
- std::swap(tablica[index1],tablica[maximum]); //zamieniam mniejszy z lewego i prawego syna i do niego wchodze
- przywruc(maximum);
- }
- }
- void usun(){
- tablica[1]=tablica[n];//usuniecie korzenie i dodanie w jego miejsce ostatniego w tablicy
- n--;
- przywruc(1);//przewracanie kopieca
- }
- int maks(){
- return tablica[1];
- }
- int main(){
- scanf("%d",&n);
- int m=n;
- for(int i=1;i<=n;i++){
- scanf("%d",&tablica[i]);
- }
- int j=n;
- for(int i=n/2;i>=1;i--){
- przywruc(i);//tworzenie kopca
- }
- while(n>=1){
- wynik[j]=maks();//robienie tablicy posortowanej z korzenia kopca
- j--;
- usun();
- }
- for(int i=1;i<=m;i++)
- printf("%d ",wynik[i]);
- return 0;
- }
- //merge
- #include <cstdio>
- #include<cstdlib>
- #include<ctime>
- const int wielkosc_tablicy=100;
- int tablica[wielkosc_tablicy+5],n;
- int L[wielkosc_tablicy],P[wielkosc_tablicy]; // tablice pomocnicze przy scalaniu
- int INF=1e9;
- void Merge(int lewy,int srodek,int prawy){ //Scalanie tablicy
- int dl1=srodek-lewy+1;
- int dl2=prawy-srodek;
- for(int i=1;i<=dl1;i++)
- L[i]=tablica[lewy+i-1]; //przepisywanie do 2 tablic pomocniczych
- for(int i=1;i<=dl2;i++)
- P[i]=tablica[i+srodek];
- L[dl1+1]=INF;// straznicy miasta
- P[dl2+1]=INF;
- int i=1,j=1;
- for(int poczatek=lewy;poczatek<=prawy;poczatek++){ // scalanie 2 tablic w jedno
- if(L[i]<=P[j]){
- tablica[poczatek]=L[i];
- i++;
- }
- else {
- tablica[poczatek]=P[j];
- j++;
- }
- }
- }
- void Merge_Sort(int lewy,int prawy){
- if(lewy<prawy){
- int srodek=(lewy+prawy)/2;
- Merge_Sort(lewy,srodek); // dzielenie na tablicy na pol
- Merge_Sort(srodek+1,prawy);
- Merge(lewy,srodek,prawy);
- }
- }
- void losuj()
- {
- srand(time(NULL));
- for(int i=0;i<20;i++)
- {
- tablica[i]=rand()%50+10;
- }
- }
- int main(){
- losuj();
- for(int i=0;i<20;i++)
- printf("%d ",tablica[i]);
- Merge_Sort(0,19);
- printf("\n");
- for(int i=0;i<20;i++)
- printf("%d ",tablica[i]);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement