先给出程序,改天再分析:(程序在VC 6.0+XP SP2下通过)
#include
<
iostream.h
>
#include < stdlib.h >
#include < time.h >
int sort_array( int * p, int low, int high)
... {
if(low>high) return 0;
int swap=*(p+low);
int i=low;
int j=high;
while(i<j)
...{
while(i<j&&swap<=*(p+j)) j--;
*(p+i)=*(p+j);
while(i<j&&swap>=*(p+i)) i++;
*(p+j)=*(p+i);
}
*(p+i)=swap;
//cout<<"i="<<i<<" "<<endl;
return i;
}
int sort( int * p, int low, int high)
... {
if(low>high) return 0;
int point=0;
point=sort_array(p,low,high);
sort(p,low,point-1);
sort(p,point+1,high);
return 1;
}
int main()
... {
srand( (unsigned)time( NULL ) );
int array[100];
for(int i=0;i<100;i++)
...{
array[i]=(rand()%100+1);
}
//int array[10]={1,5,2,6,3,4,8,9,6,7};
sort(array,0,99);
for(i=0;i<100;i++)
cout<<*(array+i)<<" ";
cout<<endl;
return 0;
}
#include < stdlib.h >
#include < time.h >
int sort_array( int * p, int low, int high)
... {
if(low>high) return 0;
int swap=*(p+low);
int i=low;
int j=high;
while(i<j)
...{
while(i<j&&swap<=*(p+j)) j--;
*(p+i)=*(p+j);
while(i<j&&swap>=*(p+i)) i++;
*(p+j)=*(p+i);
}
*(p+i)=swap;
//cout<<"i="<<i<<" "<<endl;
return i;
}
int sort( int * p, int low, int high)
... {
if(low>high) return 0;
int point=0;
point=sort_array(p,low,high);
sort(p,low,point-1);
sort(p,point+1,high);
return 1;
}
int main()
... {
srand( (unsigned)time( NULL ) );
int array[100];
for(int i=0;i<100;i++)
...{
array[i]=(rand()%100+1);
}
//int array[10]={1,5,2,6,3,4,8,9,6,7};
sort(array,0,99);
for(i=0;i<100;i++)
cout<<*(array+i)<<" ";
cout<<endl;
return 0;
}