#80 数组中的数据划分


  • 0

    规定不能使用任何数组方法,所以要计算边界值和边界序号(其前面有几个比他小的值),通过arr[--limit] = val 的赋值形式来处理。整个过程繁琐了很多。
    const partition = (arr) => {
    let arrCopy = Object.assign([],arr) ; //复制一个数组
    let limit = arrCopy[0] ; //边界值是第一个值
    let smallCount=0,limitIndex ;
    for(let i=0;i<arrCopy.length;i++){
    if(arrCopy[i]<limit){
    smallCount ++ ;
    }
    }
    limitIndex = smallCount ; // 比他小的数量即是边界值所在index位置
    arr[limitIndex] = limit ; // 在合适的位置放置界限值,其前面有smallCount个比他小的值
    for(let i=0;i<arrCopy.length;i++){
    if(arrCopy[i]<limit){
    arr[--smallCount] = arrCopy[i] ;
    }else{
    arr[++limitIndex] = arrCopy[i] ;
    }
    }
    return arr ;
    }


  • 0

    写的有点多,还是写出来了

    const partition = (arr) => {
       var newStr1 = "", newStr2 = "", newStr3 = "", str = "";
       for (let i = 0; i < arr.length; i++) {
           if (arr[0] > arr[i]) {
               newStr1 = arr[i] + "," + newStr1;
           }
           if (arr[0] === arr[i]) {
               newStr2 = newStr2 + arr[0] + ",";
           }
           if (arr[0] < arr[i]) {
               newStr3 = newStr3 + arr[i] + ",";
           }
       }
    
       str = newStr1 + newStr2 + newStr3;
    
       str = str.substring(0, str.length - 1);
    
       str.split(",").map((x, y)=>arr[y] = parseInt(x));
    
       return arr;
    };

  • 0

    const partition = (arr) => {
        const fisrt = arr[0];
        for(let i = 1,pos = 0,arrLen=arr.length;i<arrLen;i++){
            if(arr[i] <= fisrt){
                arr[pos++] = arr[i];
                arr[i] = arr[pos];
                arr[pos] = fisrt;
            }
        }
    }
    

  • 0

    @stepday 打印的还是原来的数组 不是函数的返回值, 需求是通过函数去改变数组元素的位置


  • 0

    const partition = (arr) => {
    let temp = null
    const a = arr[0] // 3
    for (let i = 0; i < arr.length; i++) {
    if (arr[i] < a) {
    temp = arr[i]
    for (let j = i; j > 0; j--) {
    arr[j] = arr[j - 1]
    }
    arr[0] = temp
    }
    }
    // 其实不用管大于第一个的,只要排序好小于的第一个的就行
    console.log(arr)
    }


  • 0

    const partition = (arr) => {
      for(let i=1,j=i-1;i<arr.length;i++){
        if(arr[i]<arr[j]){
          for(let x=i;x>j;x--){
            let temp = arr[x];
            arr[x] = arr[x-1];
            arr[x-1] =temp;
          }
          j++;
        }
      } 
    }

  • 0

    const partition = (arr) => {
    for(let i = 0; i < arr.length - 1; i ++) {
    for(let j = i + 1; j < arr.length; j ++) {
    if(arr[i] > arr[j]) {
    [arr[i], arr[j]] = [arr[j], arr[i]];
    }
    }
    }
    }


  • 0

    为了一个原生的方法都不用,我竟然只能想到再加一个数据类型,感觉想复杂了。
    const Node = function(value, next) {
    this.value = value || 0;
    this.next - next || null;
    }

    const nodeTransArr = (node) => {
    var arr = [], i = 0;
    while(!!node) {
    arr[i++] = node.value;
    node = node.next;
    }
    return arr;
    }

    const getCountNext = (n) => {
    var next = '';
    for (let i = 0;i < n; i++) {
    next += '["next"]';
    }
    return next;
    }

    const arrTransNodeByCondition = (arr) => {
    let root = new Node(arr[0], null);
    let i = 1, len = arr.length;
    let next = root.next;
    while(i < len) {
    let node = new Node(arr[i], null);
    if (arr[i] < arr[0]) {
    node.next = root;
    root = node;
    } else {
    eval(root${getCountNext(i)}=node);
    }
    ++i;
    }
    return root;
    }

    const partition = (arr) => {
    const _arr = nodeTransArr(arrTransNodeByCondition(arr));
    for (let i = 0;i < _arr.length; i++) {
    arr[i] = _arr[i];
    }
    }


  • 0

    我是这样写的 测试过了 不过不知道日常好不好用
    const partition = (arr) =>{ /* TODO */
    let ars=[];
    let qq=[];
    let a=0;
    let sum=arr[0];
    for(let i=1;i<arr.length;i++){
    if(arr[i]<sum){
    ars.push(arr[i])
    }else if(arr[i]>sum){
    qq.push(arr[i])
    }else if(arr[i]===sum){
    a++
    }
    }
    ars.push(sum);
    for(let i=0;i<a;i++){
    ars.push(sum);
    }
    ars= ars.concat(qq);
    for(let i=0;i<arr.length;i++){
    arr[i]=ars[i]

    }
    

    }


  • 0

    冒泡排序

    const partition = (arr) => {
        var temp;
    
        for(let i = 0; i < arr.length; i++){
            for(let j = 0; j < arr.length - i; j++){
                if(arr[j] > arr[j+1]){
                    temp = arr[j];
                    arr[j] = arr[j+1];
                    arr[j+1] = temp;
                }
            }
        }
    
        return arr;
    
    }
    

登录后回复
 

与 ScriptOJ 的连接断开,我们正在尝试重连,请耐心等待