昨天在社区看到一位兄贵的排序算法(RANK?),又刚好昨晚由失眠了,自己想了一个,觉得好象还可以,所以想拿出来讨论一下。我的想法是这样的开始的,在冒泡排序中,对数组中要进行n*(n-1)/2次比较,而对n个元素的数组来说,只要进行n-1次比较就可以确定它们的顺序,那么剩下的比较就完全是多余的了。就比如有3个数a<b<c,只要知道a<b,b<c就可以确定它们的位置,可要用冒泡好象要比较3次,这就对不起资源了(浪费是最大的犯罪),所以可以对它进行一点改进。我的想法是先排好数组的前i个元素,然后比较a[i]和a[i+1],如果a[i]大于a[i+1]那么交换,并且将a[i+1]放到前面它应该在的位置中……。说不清,看代码:
void test()
{int[] a={.....} //数组自己写
for(int i=0;i<=a.Lenght()-2;i++)
if(a[i]>a[i+1]) for(int j=i+1;j>0;j--)
{
if(a[j]<a[j-1])
{
int temp=a[j]; a[j]=a[j-1]; a[j-1]=temp;}
else break;
}//完成
}//这刮号好象可以去掉
}
写得不好,大家不知道看得懂意思了不?以上就是我的算法,暂且称之为SB排序法吧(双BUBBLE)。不知道以前有没有过类似的算法,我在《数据结构》上没看到,所以发上来。大家有什么意见尽管说吧,如果觉得还可以的话给的掌声和鲜花,如果看过了或是觉得实在不怎么样的话,鸡蛋和砖头你也尽管砸吧,什么?还不行,那么,我QQ28561001,(屁股向后)请赐脚...........
PS:有没有那位仁兄有对付失眠的绝招啊.......