求解?

yangweiping2011 2011-10-27 12:14:36
将一个字符数组中下标值为偶数的元素从小到大排列,其他元素不变,并输出。
...全文
101 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
xinshirn 2011-10-27
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 zhang20072844 的回复:]
你可以先把那些偶数的提出来,放到一个数组中,快排
然后每隔2隔赋值到原来的数组就好啦
[/Quote]

++
我也是这么想得,你的开销就是定义一个大小为原来一半的数组。
yangweiping2011 2011-10-27
  • 打赏
  • 举报
回复
用冒泡法为什么不行?
AnYidan 2011-10-27
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 zhang20072844 的回复:]

你可以先把那些偶数的提出来,放到一个数组中,快排
然后每隔2隔赋值到原来的数组就好啦
[/Quote]

++
AndyZhang 2011-10-27
  • 打赏
  • 举报
回复
你可以先把那些偶数的提出来,放到一个数组中,快排
然后每隔2隔赋值到原来的数组就好啦
zp032420 2011-10-27
  • 打赏
  • 举报
回复
如果是第二种我暂且写了下,其实就是排序只不过改了下,每次循环加2
#include<stdio.h>

int main(int argc,char *argv[])
{
int a[6]={4,5,2,6,1,7};
int i,j,t,exg;

for(i=0;i<6;i+=2)
{
exg=i;
for(j=i;j<6;j+=2)
if(a[exg]>a[j])
exg=j;
t=a[i];
a[i]=a[exg];
a[exg]=t;
}
for(i=0;i<6;i++)
printf("%d",a[i]);
return 0;
}
如果是第一种的话应该没问题的...
zp032420 2011-10-27
  • 打赏
  • 举报
回复
不懂你这个是把下表为偶数的元素放一起排列呢?还是只是在原来的位置把他们的位置调一下呢?
qq120848369 2011-10-27
  • 打赏
  • 举报
回复
#include <stdio.h>
#include <stdlib.h>

static int _partition(int *arr,int left,int right)
{
int i=(left<<1)-2;
int key=arr[right<<1];

for(int j=(left<<1);j<(right<<1);j+=2)
{
if(arr[j]<=key)
{
int temp=arr[i+2];
arr[i+2]=arr[j];
arr[j]=temp;
i+=2;
}
}

int temp=arr[i+2];
arr[i+2]=key;
arr[right<<1]=temp;

return (i+2)>>1;
}

static void _quickSort(int *arr,int left,int right)
{
if(left<right)
{
int sep=_partition(arr,left,right);

_quickSort(arr,left,sep-1);
_quickSort(arr,sep+1,right);
}
}

extern void quickSort(int *arr,int len)
{
_quickSort(arr,1,(len-1)>>1);
}

int main()
{
int arr[]={1,2,9,3,7,4,2,22,1};

quickSort(arr,sizeof(arr)/sizeof(arr[0]));

for(int i=2;i<sizeof(arr)/sizeof(arr[0]);i+=2)
{
printf("%d ",arr[i]);
}

return 0;
}
qq120848369 2011-10-27
  • 打赏
  • 举报
回复
有区别么,对步长为1的数组排序你会,对步长为2的数组排序你就不会了?

70,037

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧