网上看到的,题目应该叫判断一个数组是否是另一个数组的子集,或者说判断一个字符串是否是另一个字符串的子集。字符串有点困难,我这里仅仅只是找了数字的数组。
用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; } }