Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <time.h>
- #include <stdlib.h>
- using namespace std;
- int ksrav=0, kdo=0;
- void prost(int b[], int n){
- int ksrav=0, kdo=0; for (int i=0; i<n; i++)cout<<b[i]<<' ';cout<<endl;
- for (int i=1; i<n; i++){
- int key=b[i];///значение
- int j=i-1; ///индекс
- while (b[j]>key&&j>=0){ksrav++;
- b[j+1]=b[j]; kdo++;
- j--;
- }
- b[j+1]=key; kdo++; for (int i=0; i<n; i++)cout<<b[i]<<' ';cout<<endl;
- }
- for (int i=0; i<n; i++)cout<<b[i]<<' ';
- cout<<endl<<"Sravnenii : "<<ksrav<<endl<<"Deistvii : "<<kdo<<endl<<endl;
- }
- void binar(int b[], int n){
- for (int i=0; i<n; i++) cout<<b[i]<<' '; cout<<endl;
- ksrav=0; kdo=0;
- for (int i=1; i<n; i++){
- if (b[i-1]>b[i]){
- int key=b[i];
- int left=0, right=i-1;
- while (left<=right){ ksrav++;
- int sred=(left+right)/2; kdo++;
- if (b[sred]<key) left=sred+1;
- else right=sred-1; kdo++;
- }
- for (int j=i-1; j>=left; j--){ ///сдвиг
- b[j+1]=b[j]; kdo++;
- }
- b[left]=key; kdo++;
- for (int i=0; i<n; i++) cout<<b[i]<<' '; cout<<endl;
- }
- }
- for (int i=0; i<n; i++) cout<<b[i]<<' ';
- cout<<endl<<"Sravnenii : "<<ksrav<<endl<<"Deistvii : "<<kdo<<endl<<endl;
- }
- void shell(int b[], int n){
- ksrav=0; kdo=0; for (int i=0; i<n; i++) cout<<b[i]<<' '; cout<<endl;
- int d; cout<<"Interval = ";
- cin>>d;
- while (d){ cout<<"Interval = "<<d<<endl;
- for (int i=d; i<n; i++){
- int key=b[i];///значение
- int j=i-d; ///индекс
- while (b[j]>key&&j>=0){ksrav++;
- b[j+d]=b[j]; kdo++;
- j-=d;
- }
- b[j+d]=key; kdo++; //for (int i=0; i<n; i++)cout<<b[i]<<' ';cout<<endl;
- } for (int i=0; i<n; i++)cout<<b[i]<<' ';cout<<endl;
- if (d==1) break;
- d=d/3+1;
- }
- cout<<endl<<"Sravnenii : "<<ksrav<<endl<<"Deistvii : "<<kdo<<endl<<endl;
- }
- int main()
- {
- int n;
- cout<<"Razmer massiva = ";
- cin>>n;
- int a[n];
- srand(time(NULL));
- cout<<"Ishodniy massiv :"<<endl;
- for (int i=0; i<n; i++){
- a[i]=n/2-rand()%n;
- //a[i]=n-i;
- //cin>>a[i];
- }
- for (int i=0; i<n; i++)cout<<a[i]<<' ';cout<<endl;
- int pass=1;
- while (pass>0&&pass<4){
- cout<<"Kak budem sortirovat' ?"<<endl;
- cout<<'\t'<<"(1)"<<' '<<"Prostie vstavki"<<endl;
- cout<<'\t'<<"(2)"<<' '<<"Binarnie vstavki"<<endl;
- cout<<'\t'<<"(3)"<<' '<<"Algorithm Shella"<<endl;
- cin>>pass;
- int b[n];
- if (pass==1) {
- for (int i=0; i<n; i++)
- b[i]=a[i];
- prost(b , n);
- }
- if (pass==2) {
- for (int i=0; i<n; i++)
- b[i]=a[i];
- binar(b , n);
- }
- if (pass==3) {
- for (int i=0; i<n; i++)
- b[i]=a[i];
- shell(b , n);
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement