学习各种排序算法的时候琢磨这能不能原创一个。基于冒泡排序,想出一个奇偶冒泡排序。
原始BubbleSort是两两交换,而且数组移动是依次移到下一个数与下下个数交换,也就是说一轮排序中最多会交换n次(n为数组长度)
我的想法是两两交换,每次数组移动步长为2,为了实现全数组排序,此时引入了奇偶始点,每轮循环结束后始点位置在0/1中互换
贴一下C++源码
int sort[6]={6,3,7,1,2,3};
const int n=6;
int i,j,temp;
for(i=0;i<n;i++)
{
j=i%2;//奇偶始点
for(/*上行可放至此*/;j<n;j=j+2)
{
if(j+1==n||j==n)
break;//数组末尾判断
if(sort[j]-sort[j+1]>0)
{
temp=sort[j+1];
sort[j+1]=sort[j];
sort[j]=temp;
}
}
}
for(i=0;i<n;i++){
cout<<sort[i]<<endl;
}
以上空间复杂度与原冒泡排序相同,理论性能更差(判断次数更多了),对于C++性能损失可以不计。
自己想出来之后又查了一下,结果我不是原创,但是我是在没有看别人源码的情况下自己想出来的,所以也算迟到的“原创算法”吧。(而且经过对比,我的代码好像最简)
Comments | 1 条评论
博主 喜欢摸鱼真君
这个好诶