
[a1,a2,a3..an,b1,b2..bn](a1-an已排序)
我指的是b1-bn这部分未排序子数组。
[CODE]#include<iostream>
using namespace std;
int main()
{
const int max=10;
int a[max];
int *p=a;
int i,j,value1,value2;
int index1=0,index2;
cout<<"Enter the array number:";
for(i=0;i<max;i++)
{
cin>>*(p+i);
}
value1=*p;
value2=*p;
for(i=1;i<max;i++){
if(value1<*(p+i)){
value1=*(p+i);
index1=i;
}
}
for(j=1;j<max;j++){
if(value2>*(p+j)){
value2=*(p+j);
index2=j;
}
}
cout<<value1<<' '<<value2<<endl;
for(i=index1;i>0;i--){
*(p+i)=*(p+i-1);
*(p+i-1)=value1;
}
for(j=index2;j<max;j++){
*(p+j)=*(p+j+1);
*(p+j+1)=value2;
}
for(p=a;p<(a+max);p++)
cout<<*p<<' ';
cout<<endl;
return 0;
}[/CODE]
我自己又加了个提取最小数的,但为什么最小数最后会变成10呢?无论最小那个是什么,都变成10的
兄弟啊
你的这个地方有问题
你忘了大括号了
for(i=0;i<max;i++)
{
for(j=0;j<max;j++)
{
k=j+1;
if(*(p+j)<*p+k)
*(p+j)=*(p+k);//这里为什么不是每次上一数覆盖下一个数?
*p=*(p+j);
}
}
随便把你程序修改好了 你先自己看下 如果还不明白你那里做错了 再说
#include<iostream>
using namespace std;
int main()
{
const int max=10;
int a[max];
int *p=a;
int i,j,value1,value2;
int index1=0,index2;
cout<<"Enter the array number:";
for(i=0;i<max;i++)
{
cin>>*(p+i);
}
value1=*p;
value2=*p;
for(i=1;i<max;i++){
if(value1<*(p+i)){
value1=*(p+i);
index1=i;
}
}
for(i=index1;i>0;i--){
*(p+i)=*(p+i-1);
*(p+i-1)=value1;
}
for(j=1;j<max;j++){
if(value2>*(p+j)){
value2=*(p+j);
index2=j;
}
}
cout<<value1<<' '<<value2<<endl;
for(j=index2;j<max-1;j++){
*(p+j)=*(p+j+1);
*(p+j+1)=value2;
}
for(p=a;p<(a+max);p++)
cout<<*p<<' ';
cout<<endl;
return 0;
}