輸入一個整數數組,實現一個函數來調整該數組中數字的順序,使得所有的奇數位于數組的前半部分,所有的偶數位于位于數組的后半部分,并保證奇數和奇數,偶數和偶數之間的相對位置不變。
解:
第一種思路很簡短,遍歷一遍,奇數放一個array,偶數放一個array。
function reOrderArray(array)
{
if(array.length<2)return array;
var leftA=[], rightA=[];
for(var i in array){
if((array[i]%2)==1){
leftA.push(array[i]);
}else {
rightA.push(array[i]);
}
}
return leftA.concat(rightA);
}
這種算法時間復雜度為o(n),但是犧牲了內存。
第二種使用了冒泡排序的思想,如果偶數后面是奇數就交換。
function reOrderArray(array)
{
if(array.length<2)return array;
for(var i=0;i<array.length;i++){
for(var j=array.length-1;j>i;j--){
if((array[j]%2==1) && (array[j-1]%2===0)){
var temp = array[j];
array[j] = array[j-1];
array[j-1]= temp;
}
}
}
return array;
}
這種算法時間復雜度較大,O(n2),但是不占用過多的內存。
最后,兩種算法在牛客網跑都是30ms,ㄟ( ▔, ▔ )ㄏ