- 论坛徽章:
- 0
|
挑战数组腾挪大法
我的方法:
#include <stdio.h>;
main()
{
int l, i ,j,k,tmp;
int n = 10;
int objnum = 4;
int flag = 0;
int array[10] = {1,4,7,5,4,2,6,4,3,0};
i=0; j=9;
for(k = 0; k <n;k++)
{
if(array[k] == objnum)
{
flag = 1;
break;
}
}
if(flag == 0)
{
printf("the objnum %d not exist in array!\n",objnum);
exit(0);
}
while(j>;i)
{
// printf("array:" ;
// for(l = 0;l<10;l++)
// printf("% 3d",array[l]);
for(;array <objnum;i++);
for(;array[j] >;objnum;j--);
// printf(" array[%d]=%d",i,array);
// printf(" array[%d]=%d\n",j,array[j]);
// getchar();
if((array == objnum)&&(array[j] ==objnum))
{
for( k=i;k<=j;k++)
{
if(array[k] <objnum)
{
tmp =array;
array = array[k];
array[k] =tmp;
break;
}
if(array[k] >;objnum)
{
tmp =array[j];
array[j] = array[k];
array[k] =tmp;
break;
}
if(k == j)
goto end;
}
}
else
{
tmp=array;
array=array[j];
array[j] = tmp;
}
}
end:
for(l = 0;l<10;l++)
printf("array[%d]=%d\n",l,array[l]);
printf("objetnum at %d to %d\n",i,j);
}
在sco 5.05 下编译运行。
运行结果:
array[0]=1
array[1]=0
array[2]=3
array[3]=2
array[4]=4
array[5]=4
array[6]=4
array[7]=6
array[8]=5
array[9]=7
objetnum at 4 to 6
说明:
1、先判断数组中是否存在需要查找的数字;
2、从数组头开始寻找>;=目标数字的数字;
3、从数组尾开始寻找<=目标数字的数字;
4、如果这两个数字不等,交换这两个数字的位置;继续查找;
如果这两个数字相等,则从位于这两个数字之间的数字中找出一个进行交换(如找到的数字小于目标数字,则和前面的目标数字交换,如大于目标数字则和后面的交换,如没有则查找完成);继续查找。 |
|