之前看到一道题:将一个序列里面的元素,按照奇数在前,偶数在后的序列排列起来。
想到三种方法:
方法一:类似冒泡的方法,两个指针,从前遍历整个序列,将偶数一个个的往后搬移,直到某个偶数后面不会再有奇数。
此方法的时间复杂度O(N^2) 空间复杂度O(1) 相同性质的相对位置不稳定
代码:
测试结果:
方法二:添加一个计数器count,遇到偶数时,count++,然后继续遍历,遇到奇数时与前count个元素交换,最后实现奇数在前偶数在后的状态。
相对于方法一,此方法有一定的优化:时间复杂度为O(N) 空间复杂度为O(1) 相同性质的相对位置仍不稳定
代码:
测试检测:
方法三:创建临时空间,才用类似并归法,在临时空间排序,最后拷贝到原空间
1.奇数从数组0号位开始 偶数从最后一个号位开始
时间复杂度: O(N^2) 空间复杂度:O(N) 仍不稳定
代码:
测试检测:
2.改进一下,奇数从0号位开始,偶数从奇数个数 oddsize 号位开始
时间复杂度:O(N^2) 空间复杂度: O(N) 相同性质数据相对位置不改变,具有稳定性稳定
代码:
测试检测:
其他的辅助操作函数:
由于知识点的问题,眼界太局限了,没有找到时间复杂度为O(N) 空间复杂度为O(1)并且排序稳定的算法。
还需努力!!!!!