标题:一维数组做排序
只看楼主
adiu
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2008-5-24
得分:0 
不好意思
对不起各位
我想了一个晚上还是没想出新算法
当我在冒泡法的基础上改了一下
我努力提高效率
请看:
#include<stdio.h>
void main()
{
   int a[11];
   int i,j,t,p=0;
   printf("input 10 numbers :\n");
   for(i=1;i<11;i++)
      scanf("%d",&a[i]);
   printf("\n");
   for(j=1;j<=9;j++)
   {
     for(i=1;i<=10-j;i++)
     {
    if(a[i]>=a[i+1])
    {
      t=a[i];
      a[i+1]=a[i];
      a[i+1]=t;
                        p=1;
    }
     }
     if(p=0)
     break;
     else
     p=0;
   }
   for(i=1;i<11;i++)
   printf("%d ", a[i]);
}
我新增了个int变量多耗了内存2个字节
每次a[i]和a[i+1]交换值就把1赋给这个变量
出了这个循环就判断a[i]和a[i+1]是否交换过值
没有就是已排好不用循环了
在数比较多的情况下我觉得提高了效率
2008-05-25 13:32
雨中飛燕
Rank: 1
等 级:新手上路
帖 子:765
专家分:0
注 册:2007-10-13
得分:0 
这种简单的冒泡改进效率提高不多的,
这也不叫新算法,很多年前已经有很多冒泡改进的方案了
楼上用的是其中之一

[color=white]
2008-05-25 13:35
sunkaidong
Rank: 4
来 自:南京师范大学
等 级:贵宾
威 望:12
帖 子:4496
专家分:141
注 册:2006-12-28
得分:0 
那么多排序。。lz你把它们都写一遍。。比发明创造有意义的多了。呵呵 if(p=0)???

[[it] 本帖最后由 sunkaidong 于 2008-5-25 13:42 编辑 [/it]]

学习需要安静。。海盗要重新来过。。
2008-05-25 13:40
adiu
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2008-5-24
得分:0 
希望指教
我的方法还有缺点
在每次a[i]和a[i+1]交换值的时候都把1赋给p
降低了效率
希望给位大侠能改改
2008-05-25 13:41
伤心的我
Rank: 1
等 级:新手上路
帖 子:82
专家分:0
注 册:2008-5-24
得分:0 
我觉得选择排序好
2008-05-25 13:45



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-215729-1-1.html




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

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