学习各种排序算法的时候琢磨这能不能原创一个。基于冒泡排序,想出一个奇偶冒泡排序。

原始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++性能损失可以不计。

自己想出来之后又查了一下,结果我不是原创,但是我是在没有看别人源码的情况下自己想出来的,所以也算迟到的“原创算法”吧。(而且经过对比,我的代码好像最简)


是Cc