数据结构课上所留思考题:在表中,实现将技奇数排列在表的前面,偶数排列在表的后面。
偏差思路:刚开始看着道题时,觉得比较简单,遇见奇数向前“扔”即可。但在实现过程中,涉及移动数据时,思路不清晰,无法实现。后来看了老师给的代码,经过一点时间才得以理解。
代码:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a[100],i,j,k,t,n;
while(scanf("%d",&n)!=-1)
{
for(i=0;i<n;i++)
scanf("%d",&a[i]);
for(i=1;i<n;i++)
{
if(a[i]%2==1)
{
t=a[i];
for(j=i;j>0;j--)
{
a[j]=a[j-1];
}
a[0]=t;
}
}
for(i=0;i<n;i++)
printf("%d ",a[i]);
}
return 0;
}
巧妙之处,是每次从 i=1开始,的这样就把 i=0的位置空了出来。在循环中,每次遇到奇数时,都将第一个元素到本次找到的元素之前的一个元素向后移动,把i=0的位置空出来,(覆盖掉了原来位置上的奇数,将本次找的奇数排在最前面的位置。)
补充:第一个元素不用管。它会被挤在奇偶数的分界处。