鱼C论坛

 找回密码
 立即注册
查看: 2489|回复: 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
  1. #include<stdio.h>
  2. int main()
  3. {
  4.         int a[10] = {1,3,2,8,6,4,7,5,9,0};
  5.         int  i=0,s,j,h, temp;
  6.         for (h = 0; h < 10; h++)
  7.         {
  8.                 for (i = 0, j = 1; j < 10; )
  9.                 {
  10.                         s = a[i] - a[j]; // 判断大小,可用2数相减的  结果s > < = 0来确定。(,你用地址来操作不知道你何意)
  11.                         // 既然是排序那就少不了数据交换
  12.                                                 if (s < 0)
  13.                                                 {
  14.                                                         temp = a[i];
  15.                                                         a[i] = a[j];
  16.                                                         a[j]=temp;
  17.                               
  18.                                                 }
  19.                                                
  20.                                                 i = j;
  21.                                                 j++;
  22.                        
  23.                 }
  24.                        
  25.         }

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

  29.                         printf("%d\n", a[h]);
  30.                 }
  31. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> 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 | 显示全部楼层    本楼为最佳答案   
  1. #include<stdio.h>
  2. int main()
  3. {
  4.         int a[10] = {1,3,2,8,6,4,7,5,9,0};
  5.         int  i=0,s,j,h, temp;
  6.         for (h = 0; h < 10; h++)
  7.         {
  8.                 for (i = 0, j = 1; j < 10; )
  9.                 {
  10.                         s = a[i] - a[j]; // 判断大小,可用2数相减的  结果s > < = 0来确定。(,你用地址来操作不知道你何意)
  11.                         // 既然是排序那就少不了数据交换
  12.                                                 if (s < 0)
  13.                                                 {
  14.                                                         temp = a[i];
  15.                                                         a[i] = a[j];
  16.                                                         a[j]=temp;
  17.                               
  18.                                                 }
  19.                                                
  20.                                                 i = j;
  21.                                                 j++;
  22.                        
  23.                 }
  24.                        
  25.         }

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

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

使用道具 举报

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

  1. #include <stdio.h>

  2. void swap(int * a , int * b)
  3. {
  4.         int t                                                         ;
  5.         t = * a                                                       ;
  6.         * a = * b                                                     ;
  7.         * b = t                                                       ;
  8. }

  9. int main(void)
  10. {
  11.         int a[10] = {1,3,2,8,6,4,7,5,9,0} , i , j                     ;
  12.         for(i = 0 ; i < 5 ; i ++) {
  13.                 if(a[i] < a[9 - i]) swap(& a[i] , & a[9 - i])         ;
  14.                 for(j = i + 1 ; j < 9 - i ; j ++) {
  15.                         if(a[j] > a[i]) swap(& a[j] , & a[i])         ;
  16.                         if(a[j] < a[9 - i]) swap(& a[j] , & a[9 - i]) ;
  17.                 }
  18.         }
  19.         printf("%d" , a[0])                                           ;
  20.         for(i = 1 ; i < 10 ; i ++) printf(" %d" , a[i])               ;
  21.         printf("\n")                                                  ;
  22. }
复制代码

        编译、运行实况:
  1. D:\[00.Exerciese.2022]\C>g++ -o x x.c

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

  4. 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-4-30 17:17

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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