判断数组B是否为数组A的子集

网上看到的,题目应该叫判断一个数组是否是另一个数组的子集,或者说判断一个字符串是否是另一个字符串的子集。字符串有点困难,我这里仅仅只是找了数字的数组。

用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;
    }
}
原文地址:https://www.cnblogs.com/yupinghua/p/6297470.html