简单讲解奇偶排序算法及在Java数组中的实现
奇偶排序是一个比较有个性的排序,基本思路是奇数列排一趟序,偶数列排一趟序,再奇数排,再偶数排,直到全部有序
举例吧,
待排数组
[624159]
第一次比较奇数列,奇数列与它的邻居偶数列比较,如6和2比,4和1比,5和9比
[624159]
交换后变成
[261459]
第二次比较偶数列,即6和1比,5和5比
[261459]
交换后变成
[216459]
第三趟又是奇数列,选择的是2,6,5分别与它们的邻居列比较
[216459]
交换后
[124659]
第四趟偶数列
[124659]
一次交换
[124569]
Java实现:
staticvoidoddEvensort(int[]ary){ //奇偶排序 booleanflag=true; while(flag){ booleanodd=false,even=false; for(inti=0;i<ary.length-1;i+=2){ if(ary[i]>ary[i+1]){ ary[i]=ary[i+1]+0*(ary[i+1]=ary[i]); odd=true; } } for(inti=1;i<ary.length-1;i+=2){ if(ary[i]>ary[i+1]){ ary[i]=ary[i+1]+0*(ary[i+1]=ary[i]); even=true; } } flag=odd||even;//若为false,表示不论奇偶序列,一个符合条件的比较都没有 } }
上面的flag=odd||even; 有一个为true,表示还在交换,那么最后只有都为false时,flag才为false。
改写成flag=odd&&even; 有一个为false,则不再整体循环了。跟冒泡排序一样,可以减少最后一次内层循环。