Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <time.h>
- #include <math.h>
- // 9 10 1 7 0 1 9 3 2 0 - I
- // 9 7 0 5 7 10 4 3 4 5 - II
- // 7 4 0 9 9 6 1 1 0 9 - III
- void do_array(int *,int,int,int);
- void print(int *,int,int);
- void sort(int*,int,int);
- void swap(int*,int*);
- void sort2(int *,int);
- int prov(int *,int/*,int *,int **/);
- int X=0,Y=0;
- int main(void)
- {
- int N,*ar,a,b;
- //N - кол-во элементов ar-массив a и b - границы для рандома
- srand(time(NULL));
- printf("N,a,b=");
- scanf("%d%d%d",&N,&a,&b);
- ar=malloc(N*sizeof(int));
- do_array(ar,N,a,b);
- /*
- *ar=9;
- *(ar+1)=10;
- *(ar+2)=1;
- *(ar+3)=7;
- *(ar+4)=0;
- *(ar+5)=1;
- *(ar+6)=9;
- *(ar+7)=3;
- *(ar+8)=2;
- *(ar+9)=0;*/
- /*
- *ar=9;
- *(ar+1)=7;
- *(ar+2)=0;
- *(ar+3)=5;
- *(ar+4)=7;
- *(ar+5)=10;
- *(ar+6)=4;
- *(ar+7)=3;
- *(ar+8)=4;
- *(ar+9)=5;*/
- /*
- *ar=7;
- *(ar+1)=4;
- *(ar+2)=0;
- *(ar+3)=9;
- *(ar+4)=9;
- *(ar+5)=6;
- *(ar+6)=1;
- *(ar+7)=1;
- *(ar+8)=0;
- *(ar+9)=9;*/
- print(ar,0,N-1);
- sort2(ar,N);
- printf("END 2\nN is %d\n",N);
- print(ar,0,N-1);
- free(ar);
- return 0;
- }
- void do_array(int *m,int N,int a,int b){
- int i;
- for(i=0;i<N;i++)
- *(m+i)=a+rand()%(b-a+1);
- }
- void print(int *a,int f,int l){
- int i;
- printf("f=%d l=%d\n",f,l);
- for(i=f;i<=l;i++)
- printf("%3d",i);
- printf("\n");
- for(i=f;i<=l;i++)
- printf("%3d",*(a+i));
- printf("\n\n");
- }
- void sort(int *a,int first,int last){
- if(last-first==1){
- if(*(a+first)<*(a+last)){
- printf("swapping:\n%2d & %2d\n%2d & %2d\n",first,last,*(a+first),*(a+last));
- swap(a+first,a+last);
- Y++;
- }
- X=X+2;
- return;
- }
- int l=first,r=last,S=*(a+(last+first)/2);
- printf("sorting array is:\n");
- print(a,l,r);
- printf("key is:\n%2d\n%2d\n",(last+first)/2,S);
- while(l<r){
- while(*(a+l)>S){
- l++;
- X++;
- }
- while(*(a+r)<S){
- r--;
- X++;
- }
- if(l<r){
- printf("swapping:\n%2d & %2d\n%2d & %2d\n",l,r,*(a+l),*(a+r));
- swap(a+l,a+r);
- Y++;
- l++;
- r--;
- }
- X++;
- print(a,first,last);
- }
- if(first<r){
- printf("Sorting left half\n");
- sort(a,first,r);
- }
- if(l<last){
- printf("Sorting right half\n");
- sort(a,l,last);
- }
- X=X+2;
- }
- void swap(int *a,int *b){
- int c=*a;
- *a=*b;
- *b=c;
- return;
- }
- void sort2(int *ar,int N){
- int k,i=0,i2=0,b,l=0;
- b=prov(ar,N/*,&i,&i2*/);
- while(b){
- printf(">>>\n");
- for(k=l;k<N-1-l;k++){
- if(*(ar+k)<*(ar+k+1)){
- swap(ar+k,ar+k+1);
- i2=i2+3;
- }
- print(ar,0,N-1);
- i=i+2;
- }
- l++;
- b=prov(ar+l-1,N-l/*,&i,&i2*/);
- if(b){
- printf("<<<\n");
- for(k=N-1-l;k>l-1;k--){
- if(*(ar+k)>*(ar+k-1)){
- swap(ar+k,ar+k-1);
- i2=i2+3;
- }
- print(ar,0,N-1);
- i=i+2;
- }
- }
- b=prov(ar+l,N-l/*,&i,&i2*/);
- }
- printf("Buble sort: comparings %d equals %d\nN=%d\n",i,i2,N);
- printf("FUCK\n");
- /* for(k=0;k<2;k++) //k<1
- printf("%d\n",k);*/
- return;
- }
- int prov(int *a,int N/*,int *k1,int *k2*/){
- int i=0,b=0;
- while(i+1){
- if(*(a+i)<*(a+i+1))
- {
- b=1;
- i=-1;
- // *k2=*k2+2;
- }
- else{
- i++;
- // *k2++;
- }
- if(i>N-2){
- i=-1;
- // *k2++;
- }
- // *k1=*k1+3;
- }
- return b;
- }
Advertisement
Add Comment
Please, Sign In to add comment