求一个数组时间最快的排序方法

uuufff163 2012-08-22 09:21:16
一个数组 格式内容为: a,A,b,B,c,C,d,D ... ... 任意长度
排序为这样内容的格式 :a,b,c,d ... A,B,C,D ...
求时间最快的算法。谢谢。
...全文
287 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
uuufff163 2012-08-22
  • 打赏
  • 举报
回复
嗯,明白了,谢谢楼上各位的热情回复!
ies_sweet 2012-08-22
  • 打赏
  • 举报
回复
求时间最快的方法,那就牺牲空间
先取数据长度,然后申请一个备份空间
然后直接定下标取值写入就可以

当然,前提是楼主所说的这种规律性数据源
nice_cxf 2012-08-22
  • 打赏
  • 举报
回复
如果空间不介意,o(n)显然没问题,
知道了n复制源数据后,
ARR[0]=ARROLD[0];
ARR[1]=ARROLD[2];
ARR[2]=ARROLD[4];
...
ARR[N/2+1]=ARROLD[1];
....




cao_julians 2012-08-22
  • 打赏
  • 举报
回复
对这种情况而言,基数排序最快,只需一轮派遣和一轮收集就搞定
恨天低 2012-08-22
  • 打赏
  • 举报
回复
既然格式内容都固定好了,那不用排序了,直接通过下标取。

1、可以得到数组长度:n = sizeof(arr)/sizeof(arr[0])
2、取arr[0], arr[2], arr[4], ...., arr[n]
3、再取arr[1], arr[3], arr[5], ...., arr[n-1]
tianxiadys 2012-08-22
  • 打赏
  • 举报
回复
只有链表可以最快

但实际上这没必要,因为这么一点计算量在我的程序里都是忽略不计的
niehuawen 2012-08-22
  • 打赏
  • 举报
回复
#include"stdio.h"
#define N 8
void main()
{

int a[8]={'a','A','b','B','c','C','d','D'},b[8],i;
for(i=0;i<N;i++)
{
if(i%2==0)
b[i/2]=a[i]; //偶元素a[0]、a[2]、a[4]、a[6]放置在b[0]、b[1]、b[2]、b[3]中
else
b[N/2+(i-1)/2]=a[i]; //奇元素放置
}
for(i=0;i<N;i++)
{
printf("%c\n",b[i]);
}
}
赵4老师 2012-08-22
  • 打赏
  • 举报
回复
qsort

69,371

社区成员

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

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