主题:分享个排序算法...........
InitInstance
[专家分:8720] 发布于 2006-06-25 10:57:00
#include<stdio.h>
#include<stdlib.h>
#define n 18
void main()
{
bool bIEvennumber=false;//元素个数是否偶数
int A[n]={3,1,5,4,7,9,8,6,10,2,12,11,14,13,16,15,18,17};
int max,min,i,j,d,c;
printf("原数组为: ");
for(i=0;i<n;i++)
printf("%d ",A[i]);
printf("\n");
if(n%2==0)
bIEvennumber=true;
for(i=0;i<n/2;i++) //
{
max=min=A[i];
c=d=i;
for(j=i+1;j<n-i;j++)
{
if(A[j]>=max)
{
max=A[j];
c=j;
}
else if(A[j]<=min)
{
min=A[j];
d=j;
}
}
if(j-i<=2)
break;
//较小值放前面
A[d]=A[i];
A[i]=min;
//较大值放后面
if(c!=i)
{
A[c]=A[j-1];
A[j-1]=max;
}
else
{
max=A[j-1];
//此处max被用做中间变量不用担心影响到它本来的作用
A[j-1]=A[d];
A[d]=max;
}
}
if(bIEvennumber&&A[i]>A[i+1])
{
int temp;
temp=A[i+1];
A[i+1]=A[i];
A[i]=temp;
}
printf("调整后的数组为:");
for(i=0;i<n;i++)
printf("%d ",A[i]);
printf("\n ");
return;
}
回复列表 (共22个回复)
11 楼
InitInstance [专家分:8720] 发布于 2006-06-27 17:59:00
再度小的改进:
#include<stdio.h>
#include<stdlib.h>
#include <time.h>
#define n 17
void main()
{
int A[n];
int max,min,i,j,d,c;
srand( (unsigned)time( NULL ) );
for(i=0;i<n;i++)
A[i]=rand()/50;//产生随机数
printf("原数组为: ");
for(i=0;i<n;i++)
printf("%d ",A[i]);
printf("\n");
for(i=0;i<n/2;i++)
{
max=min=A[i];
c=d=i;
for(j=i+1;j<n-i;j++)
{
if(A[j]>=max)
{
max=A[j];
c=j;
}
else if(A[j]<=min)
{
min=A[j];
d=j;
}
}
if(j-i<=1) //更改过,原来是if(j-i<=2)
break;
//较小值放前面
A[d]=A[i];
A[i]=min;
//较大值放后面
if(c!=i)
{
A[c]=A[j-1];
A[j-1]=max;
}
else
{
max=A[j-1];
//此处max被用做中间变量不用担心影响到它本来的作用
A[j-1]=A[d];
A[d]=max;
}
}
/*if(A[i]>A[i+1]) //去掉这里
{
int temp;
temp=A[i+1];
A[i+1]=A[i];
A[i]=temp;
}*/
printf("调整后的数组为:");
for(i=0;i<n;i++)
printf("%d ",A[i]);
printf("\n ");
return;
}
12 楼
allten [专家分:0] 发布于 2006-07-02 11:24:00
你想争钱吗?我的视频店铺开张了,免费视频招聘,免费视频求职,免费视频简历,免费视频店铺,网上做生意 尽在我财网- www.51ccb.com 可以和店主进行讨价还价的网上视频店铺www.51ccb.com
可以直接面对顾客,就象在贸易市场上开店那样,可以和顾客直接切磋,进行讨价还价,让网上的买卖回归现实,这一切就发生在www.51ccb.com,而且在这个网站开店永远是免费的,视频应聘软件下载
一个很好用的视频聊天,视频招聘,视频应聘软件 ,下载地址:http://www.51ccb.com/download/ccb2006_setup.exe
只要你下载好这个软件你的梦想将在www.51ccb.com实现!!快快加入吧!!
13 楼
piecefish [专家分:0] 发布于 2006-07-04 16:59:00
这种算法代码数量跟气泡排序相比多了一倍啊!!!
14 楼
天国龙 [专家分:490] 发布于 2006-07-05 20:27:00
单向双向~时间复杂度差不多啊
15 楼
InitInstance [专家分:8720] 发布于 2006-07-06 08:09:00
时间频度(执行次数)可低多了,在n不是很大时比其他一般算法较有效.............
16 楼
linyuetian [专家分:310] 发布于 2006-07-06 12:39:00
顶一顶,好样的
想法不错,但好像时间复杂度和空间复杂度不是很理想
还是要顶一顶
17 楼
candynet [专家分:80] 发布于 2006-07-09 18:47:00
不明白这里;A[j-1]是每次比较的最后一个元素,不是A[j]是每次比较序列的最后一个元素么?
18 楼
candynet [专家分:80] 发布于 2006-07-09 22:53:00
现在明白了,谢谢楼主!
19 楼
wenmang [专家分:10] 发布于 2006-07-11 11:11:00
学习一下
20 楼
xiaoxpp [专家分:10] 发布于 2006-08-18 23:49:00
此算法在《数据结构》练习题中有出现 ,楼主想法不错 ,望继续努力
我来回复