| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 10445 人关注过本帖
标题:对同一列数据用各种排序法来统计分别各自交换了多少次,来比较用哪种方法交 ...
只看楼主 加入收藏
自学的数学
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:46
帖 子:967
专家分:4146
注 册:2017-11-15
结帖率:93.33%
收藏
已结贴  问题点数:35 回复次数:51 
对同一列数据用各种排序法来统计分别各自交换了多少次,来比较用哪种方法交换的次数最少?
数列定位:int a[10]={10,9,8,7,6,5,4,3,2,1};
要求:用C语言里的8种排序法分别对它排序(排好后是从小到大的顺序),排序的同时,统计该数据共交换了多少次才排序成功。看看用哪种方法交换的次数最少?
提示:C语言里的8种排序法分别是
     1:冒泡排序
     2:选择排序
     3:插入排序
     4:希尔排序
     5:快速排序
     6:归并排序
     7:堆排序
     8:基数排序
当然,你可以只用一种排序法写出来共交换了多少次(比如我就用冒泡排序法排出来了,也统计了冒泡排序法要用45步完成排序),这也是可以的,当然了,你如果能编出代码把8 种排序法一起编进去那就更好了。
搜索更多相关主题的帖子: 排序 统计 交换 多少 方法 
2018-05-22 16:18
自学的数学
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:46
帖 子:967
专家分:4146
注 册:2017-11-15
收藏
得分:0 
用“冒泡排序”,俺写好了,大家可以参考下:
程序代码:
#include <stdio.h>
void sort(int *a,int len)

 {
   int i,j,t,z,count=0;
   for(i=0;i<len-1;i++)
     {
       for(j=0;j<len-i-1;j++)
          {
           if(a[j]>a[j+1])
              {
                t=a[j];
                a[j]=a[j+1];
                a[j+1]=t;
              printf(" 第 %3d 次交换: ",++count);
              for(z=0;z<10;z++)
              printf("%4d ",a[z]);
              printf("\n");
              }
             
          }
     }
      printf("共交换%4d 次",count);
      printf("\n");
  }
int main(int argc, char *argv[])
{
   int a[10]={10,9,8,7,6,5,4,3,2,1};
   int i=0;
   printf("这段代码是用冒泡排序法来统计共交换了多少次。\n ");
   printf("交换前的数据: ");
   for(i=0;i<10;i++)
              printf(" %4d",a[i]);
   printf("\n");
   sort(a,10);
   printf(" 交换后的数据: ");
   for(i=0;i<10;i++)
             printf("%4d ",a[i]);
   return 0;
}

效果图:
图片附件: 游客没有浏览图片的权限,请 登录注册
2018-05-22 16:39
lin5161678
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:45
帖 子:1136
专家分:3729
注 册:2011-12-3
收藏
得分:0 
你好像对排序有点误解
选择排序 冒泡排序 等排序算法有多种不同的写法
对特定序列交换次数的不一样的

https://zh.
2018-05-22 16:42
自学的数学
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:46
帖 子:967
专家分:4146
注 册:2017-11-15
收藏
得分:0 
编程的时候,请在代码里注明:用什么排序法完成的。
还有就是,如果你和别人用的同一种排序法,但是比别人用的步数少也完成排序的,也可以写下来。
2018-05-22 16:47
dzy123
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:5
帖 子:379
专家分:820
注 册:2013-4-18
收藏
得分:0 

我只会这一种也是45次是巧合?

[此贴子已经被作者于2018-5-22 17:07编辑过]

2018-05-22 17:01
自学的数学
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:46
帖 子:967
专家分:4146
注 册:2017-11-15
收藏
得分:0 
你换个思路呢。你把
for(i=0;i<len-1;i++)
     {
       for(j=0;j<len-i-1;j++)
          {
           if(a[j]>a[j+1])
里面的(i=0;i<len-1;i++)改成(i=len-1;i0;i--)
(j=0;j<len-i-1;j++)同理
试试看。
2018-05-22 17:25
lin5161678
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:45
帖 子:1136
专家分:3729
注 册:2011-12-3
收藏
得分:0 
回复 5楼 dzy123
45 是因为 这个序列刚刚好逆序
对应冒泡算法 最差时间复杂度

其他排序比如基数排序
根据选择的基数不一样
排序过程区别很大的

https://zh.
2018-05-22 17:27
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:5 
其实说到底排序不一定是数据交换,可能只是简单的赋值,交换一次是3步,每次赋值可以单独算一步~
例如插入,快排和归并就是典型的赋值而并非交换~

还有插入排序查找数据也需要时间~有分线性查找和二分查找,进行赋值也有分直接移动插入和修改结点指针(用数组模拟链表),还有同一种插入排序用链表和用数组的赋值次数是不一样的,正常来说是链表赋值次数比较少,但对链表指针进行运算却是比一般用数组要多一些时间的,所以具体效率就很难说了~

还有补充一下~还有个叫二叉排序树,二叉排序树也有分普通二叉树,平衡二叉树,平衡二叉树也有分AVL树,红黑树,当然还有别的树的~

就算单单从交换的角度来判断,至少还是看不出什么的,可以试试看执行多少条语句,每执行一条语句算一次这样会不会好一点呢~

[此贴子已经被作者于2018-5-22 20:01编辑过]


[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2018-05-22 18:55
自学的数学
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:46
帖 子:967
专家分:4146
注 册:2017-11-15
收藏
得分:0 
用“选择排序法”写好了,排序顺序和冒泡排序顺序不一样,但是交换次数一样。都是45次。
程序代码:
# include "stdio.h"
# define N 10
int main()
{
    int i,j,temp,count,z;
    int a[N]={10,9,8,7,6,5,4,3,2,1};
    printf("这段代码是用选择排序法来统计共交换了多少次。\n ");
    printf("交换前的数据: ");
    for(i=0;i<N;i++)
              printf(" %4d",a[i]);
    printf("\n");
    for(i=0;i<N;i++)
    for(j=i+1;j<N;j++)
    {
        if (a[i]>a[j])
        {
        temp=a[i];
        a[i]=a[j];
        a[j]=temp;
        printf(" 第 %3d 次交换: ",++count);
        for(z=0;z<N;z++)
              printf("%4d ",a[z]);
         printf("\n");
        }
    }
    printf("共交换%4d 次",count);
    printf("\n");
    printf(" 交换后的数据: ");
    for(i=0;i<N;i++)
    printf("%5d",a[i]);
}
2018-05-22 21:27
自学的数学
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:46
帖 子:967
专家分:4146
注 册:2017-11-15
收藏
得分:0 
图片附件: 游客没有浏览图片的权限,请 登录注册
2018-05-22 21:48
快速回复:对同一列数据用各种排序法来统计分别各自交换了多少次,来比较用哪种方 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.033329 second(s), 11 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved