问一排序算法~!

kingerwt 2006-12-23 10:26:43
我这里有个13位的数组,假设是13,14,17,110,113,25,211,33,35,312,313,42,48,414
但是他的顺序是乱的 我需要排出的就是给出的这个顺序,数字的第1位从小到大排 然后第1位相同的也从小到大排~~~
想了老半天了~~郁闷,头都大了。。。
...全文
189 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
kingerwt 2006-12-24
  • 打赏
  • 举报
回复
谢谢大家啦~~我自己刚刚也弄了一段程序也做出来了~~不过超级的复杂,好多好多,完全没有性能可言~~哈哈,看了楼上的代码茅塞顿开~~谢了~~
nasi00(莫傲·逍遥)是高人,指针我接触的少,不是很容易看懂,我还太菜了~~呵呵,现在太晚了,明天来研究您的程序~~嘿嘿~~总之谢谢了!
cjq87 2006-12-23
  • 打赏
  • 举报
回复
#include <stdio.h>

int getfirst(int n)
{
int t;
while(n)
{
t=n;
n/=10;
}
return t;
}
void mysort(int a[],int n)
{
int i, j, m ,t;

for(i=0;i<n-1;i++)
for(j=i+1;j<n;j++)
{
m=getfirst(a[i]);
t=getfirst(a[j]);
if(m>t||(m==t&&a[i]>a[j]))
{
m=a[i];
a[i]=a[j];
a[j]=m;
}
}
}

void main()
{
int a[]={42,48,414,33,35,312,313,13,14,17,110,113,25,211};
int i, n;

n=sizeof(a)/sizeof(a[0]);
mysort(a,n);
for(i=0;i<n;i++)
printf("%d\t",a[i]);
}
nasi00 2006-12-23
  • 打赏
  • 举报
回复
这个很容易阿,就是相当于你把compare(a, b)这个过程给重定义了一下
以前都是直接通过比较来得出大小,而现在你得把每个数按位切开(这个很容易吧)
然后按照首位和位数排一下就可以了(如果我没有理解错的话...)

我大概写了一下,输出的结果是一样的,你可以看一下是不是这个样子的:

#include <stdio.h>
#include <math.h>

int array[] = { 414, 48, 42, 13, 14, 17, 110,
25, 113, 33, 211, 312, 35, 313
};

#define n (sizeof(array)/sizeof(int))

int cmp(const void *p, const void *q)
{
int *a = (int *) p;
int *b = (int *) q;
int a_bit, b_bit, a_head, b_head, t;

a_bit = 0;
t = *a;
while (t > 0) {
a_bit++;
t /= 10;
}

b_bit = 0;
t = *b;
while (t > 0) {
b_bit++;
t /= 10;
}

a_head = *a / (int) pow(10, a_bit - 1);
b_head = *b / (int) pow(10, b_bit - 1);

if (a_head < b_head)
return -1;
else if (a_head > b_head)
return 1;
else {
if (a_bit < b_bit)
return -1;
else if (a_bit > b_bit)
return 1;
else
return *a - *b;
}

}

int main()
{
int i;

qsort(array, n, sizeof(int), cmp);
for (i = 0; i < n; i++)
printf("%d%s", array[i], (i == n - 1) ? "\n" : " ");

return 0;
}


输出结果:
13 14 17 110 113 25 211 33 35 312 313 42 48 414
kingerwt 2006-12-23
  • 打赏
  • 举报
回复
13,14,17,110,113,25,211,33,35,312,313,42,48,414
第1位是1的数据先按从小到大排序,然后接着是2的 3的 4的,起初给的数组里的数据是乱的,随机的~~
cjq87 2006-12-23
  • 打赏
  • 举报
回复
楼主是不是要先比较第一位 再比较后面的
不想低调 2006-12-23
  • 打赏
  • 举报
回复
"数字的第1位从小到大排 然后第1位相同的也从小到大排~~~?"
什么意思,看不懂!
kingerwt 2006-12-23
  • 打赏
  • 举报
回复
是整形数组

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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