#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
void Qsort(int *a,int x,int y){//自顶向下 先求出a[x]的位置
if(x<y){
int i=x,j=y;
while(i<j){
i++;
while(i<y&&a[i]<a[x]) i++; //i与j不能越界
j--; //若a只有一个元素,j--后等于x,故到递归出口
while(j>x&&a[j]>a[x]) j--;
if(i<j){
int t=a[i];
a[i]=a[j];
a[j]=t;
}
}
int t=a[x]; a[x]=a[j]; a[j]=t;
Qsort(a,x,j);
Qsort(a,j+1,y);
}
}
void Mergesort(int *a,int x,int y,int *t){//自底向上
if(y-1>x){ //递归出口为一个元素,当区间为[x,x+1)时只有一个元素,递归完成
int m=x+(y-x)/2;
Mergesort(a,x,m,t); //分
Mergesort(a,m,y,t);
int p=x,q=m,i=x;
while(p<m||q<y){ //和
if(q>=y||(p<m&&a[p]<a[q])) t[i++]=a[p++];
else t[i++]=a[q++];
}
for(int i=x;i<y;i++) a[i]=t[i];
}
#include <time.h>
#include <stdlib.h>
int A[10];
void qsort(int x,int y){
if(x<y-1){
int i=x,j=y;
while(i<j){
i++;
while(i<y&&A[i]<A[x]) i++;
j--;
while(j>x&&A[j]>A[x]) j--;
if(i<j){
int t=A[i]; A[i]=A[j]; A[j]=t;
}
}
int t=A[x]; A[x]=A[j]; A[j]=t;
qsort(x,j);
qsort(j+1,y);
}
}
void binary(int i,int j,int *fmax,int *fmin){
if(i==j-1){
*fmax=*fmin=A[i];
}else if(j-1>i){
int mid=i+(j-i)/2;
int gmax,gmin,hmax,hmin;
binary(i,mid,&gmax,&gmin);
binary(mid,j,&hmax,&hmin);
if(gmax>hmax) *fmax=gmax;
else *fmax=hmax;
if(gmin<hmin) *fmin=gmin;
else *fmin=hmin;
}
}
int main(){
int fmax,fmin;
srand(time(NULL));
for(int i=0;i<10;i++){
A[i]=(int)(((double)rand()/RAND_MAX)*100);
printf("%d ",A[i]);
}printf("\n");
fmax=fmin=A[0];
binary(0,10,&fmax,&fmin);
printf("max=%d min=%d\n",fmax,fmin);
qsort(0,10);
for(int i=0;i<10;i++) printf("%d ",A[i]);
printf("\n");
return 0;
}
#include <stdlib.h>
#include <time.h>
#include <string.h>
void Qsort(int *a,int x,int y){//自顶向下 先求出a[x]的位置
if(x<y){
int i=x,j=y;
while(i<j){
i++;
while(i<y&&a[i]<a[x]) i++; //i与j不能越界
j--; //若a只有一个元素,j--后等于x,故到递归出口
while(j>x&&a[j]>a[x]) j--;
if(i<j){
int t=a[i];
a[i]=a[j];
a[j]=t;
}
}
int t=a[x]; a[x]=a[j]; a[j]=t;
Qsort(a,x,j);
Qsort(a,j+1,y);
}
}
void Mergesort(int *a,int x,int y,int *t){//自底向上
if(y-1>x){ //递归出口为一个元素,当区间为[x,x+1)时只有一个元素,递归完成
int m=x+(y-x)/2;
Mergesort(a,x,m,t); //分
Mergesort(a,m,y,t);
int p=x,q=m,i=x;
while(p<m||q<y){ //和
if(q>=y||(p<m&&a[p]<a[q])) t[i++]=a[p++];
else t[i++]=a[q++];
}
for(int i=x;i<y;i++) a[i]=t[i];
}
}
#include <time.h>
#include <stdlib.h>
int A[10];
void qsort(int x,int y){
if(x<y-1){
int i=x,j=y;
while(i<j){
i++;
while(i<y&&A[i]<A[x]) i++;
j--;
while(j>x&&A[j]>A[x]) j--;
if(i<j){
int t=A[i]; A[i]=A[j]; A[j]=t;
}
}
int t=A[x]; A[x]=A[j]; A[j]=t;
qsort(x,j);
qsort(j+1,y);
}
}
void binary(int i,int j,int *fmax,int *fmin){
if(i==j-1){
*fmax=*fmin=A[i];
}else if(j-1>i){
int mid=i+(j-i)/2;
int gmax,gmin,hmax,hmin;
binary(i,mid,&gmax,&gmin);
binary(mid,j,&hmax,&hmin);
if(gmax>hmax) *fmax=gmax;
else *fmax=hmax;
if(gmin<hmin) *fmin=gmin;
else *fmin=hmin;
}
}
int main(){
int fmax,fmin;
srand(time(NULL));
for(int i=0;i<10;i++){
A[i]=(int)(((double)rand()/RAND_MAX)*100);
printf("%d ",A[i]);
}printf("\n");
fmax=fmin=A[0];
binary(0,10,&fmax,&fmin);
printf("max=%d min=%d\n",fmax,fmin);
qsort(0,10);
for(int i=0;i<10;i++) printf("%d ",A[i]);
printf("\n");
return 0;
}