網上看到的,題目應該叫判斷一個數組是否是另一個數組的子集,或者說判斷一個字符串是否是另一個字符串的子集。字符串有點困難,我這里僅僅只是找了數字的數組。
用javascript改寫了一下,but,遇到一個問題是在快速排序法那里,原來取出arr[0]作為基准值之后,在循環比較的時候要從1開始。否則報錯遞歸溢出!我找了半天原因,痛苦!
轉載和抓取請留鏈接http://www.cnblogs.com/yupinghua/p/6297470.html
var arrA=[33,11,88,22,33,56,16,44,99,18,66]; var arrB=[11,22,33,56,16,18,66]; console.log('排序前arrA:'+arrA); console.log('排序前arrB:'+arrB); console.log('排序后arrA:'+quickSort(arrA)); console.log('排序后arrB:'+quickSort(arrB)); var arr1 = quickSort(arrA); var arr2 = quickSort(arrB); console.log('數組B是否為數組A的子集:'+isSubset(arr1,arr2)); //快速排序 function quickSort(arr) { if (arr.length ==0){ return []; } var pivot = arr[0]; var left = []; var right = []; for (var i = 1; i < arr.length; i++){ if (arr[i] < pivot) { left.push(arr[i]); } else { right.push(arr[i]); } } return quickSort(left).concat(pivot,quickSort(right)); }; //判斷 function isSubset(arr1,arr2){ var i=0,j=0; if(arr1.length<arr2.length) return false; while(i<arr2.length && j<arr1.length){ if(arr1[j] < arr2[i]){ j++; }else if( arr1[j] == arr2[i] ){ j++; i++; }else if( arr1[j]>arr2[i]){ return false; } } if(i<arr2.length){ return false; }else{ return true; } }