鱼C论坛

 找回密码
 立即注册
查看: 1259|回复: 2

[已解决]最后的子函数为什么不能达到排序效果

[复制链接]
发表于 2019-2-26 23:04:21 | 显示全部楼层 |阅读模式

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

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

x
#include<stdio.h>
void main()
{
        extern void sort(int x[],int n);
        int a[10];
        int i;
        for(i = 0;i < 10;i++)
        {
                scanf("%d",&a[i]);
        }
        for(i = 0;i < 10;i++)
        {
                printf("%d ",a[i]);
        }
        printf("\n");
        sort(a,10);
    for(i = 0;i < 10;i++)
        {
                printf("%d ",a[i]);
        }
}
void sort(int x[],int n)
{
        int i,j,temp;
        for(i = 0;i < (n - 1);i++)
        {
                j = (i + 1);
                if(i < j)
                {
                temp = x[i];
                x[i] = x[j];
                x[j] = temp;
                }
        }
}
最佳答案
2019-2-26 23:48:21
本帖最后由 jackz007 于 2019-2-27 00:08 编辑
  1.                 j = (i + 1);
  2.                 if(i < j)
  3.                 {
  4.                 temp = x[i];
  5.                 x[i] = x[j];
  6.                 x[j] = temp;
  7.                 }
复制代码

      把数组索引值的大小作为调整元素顺序的依据不知楼主是如何考虑的。

      排序函数 sort() 没有功能,我已经重写,楼主可以测试效果。
  1. #include <stdio.h>

  2. void sort(int x[] , const int n)
  3. {
  4.         int i , j , temp                ;
  5.         for(i = 1 ; i < n ; i ++) {
  6.                 j = i                   ;
  7.                 while(j > 0 && x[j] < x[j - 1]) {
  8.                         temp = x[j]     ;
  9.                         x[j] = x[j - 1] ;
  10.                         x[j - 1] = temp ;
  11.                         j --            ;
  12.                 }
  13.         }
  14. }

  15. main(void)
  16. {
  17.         int i , a[10]                                   ;
  18.         for(i = 0 ; i < 10 ; i ++) scanf("%d" , & a[i]) ;
  19.         for(i = 0 ; i < 10 ; i ++) printf("%d " , a[i]) ;
  20.         printf("\n")                                    ;
  21.         sort(a , 10)                                    ;
  22.         for(i = 0 ; i < 10 ; i ++) printf("%d " , a[i]) ;
  23.         printf("\n")                                    ;
  24. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-2-26 23:48:21 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2019-2-27 00:08 编辑
  1.                 j = (i + 1);
  2.                 if(i < j)
  3.                 {
  4.                 temp = x[i];
  5.                 x[i] = x[j];
  6.                 x[j] = temp;
  7.                 }
复制代码

      把数组索引值的大小作为调整元素顺序的依据不知楼主是如何考虑的。

      排序函数 sort() 没有功能,我已经重写,楼主可以测试效果。
  1. #include <stdio.h>

  2. void sort(int x[] , const int n)
  3. {
  4.         int i , j , temp                ;
  5.         for(i = 1 ; i < n ; i ++) {
  6.                 j = i                   ;
  7.                 while(j > 0 && x[j] < x[j - 1]) {
  8.                         temp = x[j]     ;
  9.                         x[j] = x[j - 1] ;
  10.                         x[j - 1] = temp ;
  11.                         j --            ;
  12.                 }
  13.         }
  14. }

  15. main(void)
  16. {
  17.         int i , a[10]                                   ;
  18.         for(i = 0 ; i < 10 ; i ++) scanf("%d" , & a[i]) ;
  19.         for(i = 0 ; i < 10 ; i ++) printf("%d " , a[i]) ;
  20.         printf("\n")                                    ;
  21.         sort(a , 10)                                    ;
  22.         for(i = 0 ; i < 10 ; i ++) printf("%d " , a[i]) ;
  23.         printf("\n")                                    ;
  24. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-2-27 10:50:18 From FishC Mobile | 显示全部楼层
谢谢,理解了,我的做法只是进行了一次调换,想的太简单了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-28 15:40

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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