鱼C论坛

 找回密码
 立即注册
查看: 3022|回复: 8

[已解决]c排序

[复制链接]
发表于 2022-9-6 22:34:31 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
想给数组拍个顺序,但不知道哪里错了,希望有大佬指点一下。



#include<stdio.h>
int main()
{
        int a[10] = {1,3,2,8,6,4,7,5,9,0};
        int  i=0,s,j,h;
        for (h = 0; h < 10; h++)
        {
                for (i = 0, j = 1; j < 10; )
                {
                        s = &a[i] - &a[j];
                        if (s > 0)
                                j++;
                        else
                                i = j; j++;
                       
                }printf("sun%d\n", a[i]);
        }
打印结果是10列的sun0
最佳答案
2022-9-6 22:58:50
#include<stdio.h>
int main()
{
        int a[10] = {1,3,2,8,6,4,7,5,9,0};
        int  i=0,s,j,h, temp;
        for (h = 0; h < 10; h++)
        {
                for (i = 0, j = 1; j < 10; )
                {
                        s = a[i] - a[j]; // 判断大小,可用2数相减的  结果s > < = 0来确定。(,你用地址来操作不知道你何意)
                        // 既然是排序那就少不了数据交换
                                                if (s < 0)
                                                {
                                                        temp = a[i];
                                                        a[i] = a[j];
                                                        a[j]=temp;
                               
                                                }
                                                
                                                i = j; 
                                                j++;
                       
                }
                        
        }

                // 最后打印排序好的数据
                 for (h = 0; h < 10; h++)
        {

                        printf("%d\n", a[h]);
                }
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-9-6 22:39:17 | 显示全部楼层
你要怎么个排序法?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-9-6 22:40:02 | 显示全部楼层
ba21 发表于 2022-9-6 22:39
你要怎么个排序法?

大到小的排序
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-9-6 22:58:50 | 显示全部楼层    本楼为最佳答案   
#include<stdio.h>
int main()
{
        int a[10] = {1,3,2,8,6,4,7,5,9,0};
        int  i=0,s,j,h, temp;
        for (h = 0; h < 10; h++)
        {
                for (i = 0, j = 1; j < 10; )
                {
                        s = a[i] - a[j]; // 判断大小,可用2数相减的  结果s > < = 0来确定。(,你用地址来操作不知道你何意)
                        // 既然是排序那就少不了数据交换
                                                if (s < 0)
                                                {
                                                        temp = a[i];
                                                        a[i] = a[j];
                                                        a[j]=temp;
                               
                                                }
                                                
                                                i = j; 
                                                j++;
                       
                }
                        
        }

                // 最后打印排序好的数据
                 for (h = 0; h < 10; h++)
        {

                        printf("%d\n", a[h]);
                }
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-9-6 23:00:08 | 显示全部楼层
本帖最后由 jackz007 于 2022-9-6 23:04 编辑

#include <stdio.h>

void swap(int * a , int * b)
{
        int t                                                         ;
        t = * a                                                       ;
        * a = * b                                                     ;
        * b = t                                                       ;
}

int main(void)
{
        int a[10] = {1,3,2,8,6,4,7,5,9,0} , i , j                     ;
        for(i = 0 ; i < 5 ; i ++) {
                if(a[i] < a[9 - i]) swap(& a[i] , & a[9 - i])         ;
                for(j = i + 1 ; j < 9 - i ; j ++) {
                        if(a[j] > a[i]) swap(& a[j] , & a[i])         ;
                        if(a[j] < a[9 - i]) swap(& a[j] , & a[9 - i]) ;
                }
        }
        printf("%d" , a[0])                                           ;
        for(i = 1 ; i < 10 ; i ++) printf(" %d" , a[i])               ;
        printf("\n")                                                  ;
}
        编译、运行实况:
D:\[00.Exerciese.2022]\C>g++ -o x x.c

D:\[00.Exerciese.2022]\C>x
9 8 7 6 5 4 3 2 1 0

D:\[00.Exerciese.2022]\C>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-9-7 10:16:24 | 显示全部楼层

感谢,感谢,主要晚上练的时候,没地址好像没用,就那样了。谢谢解惑
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-9-7 10:18:40 | 显示全部楼层
jackz007 发表于 2022-9-6 23:00
编译、运行实况:

有好几个代码看不懂,但谢谢了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-9-8 10:18:47 | 显示全部楼层
  s = &a[i] - &a[j];
编写代码的时候需要注意一下细节哦,a数组前面不需要加地址符&
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-9-17 14:31:57 | 显示全部楼层
AiXueXiDeDai 发表于 2022-9-8 10:18
s = &a - &a[j];
编写代码的时候需要注意一下细节哦,a数组前面不需要加地址符&

好的,感谢,刚学指针,有点摸不着头脑
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-28 04:55

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表