算法

  • 快速排序【1】
private <T extends comparable<? super T>> void quicksort (T[] targetArr, int start, int end) {
    int i = start; int j = end;
    T key = targetArr[i];

    while(i < j) {
        while(j > i && targetArr[j].compareTo(key) >= 0) {
            j--;
        }
        if(j > i) {
            target[i] = target[j];
            i++;
        }
        while(i < j && targetArr[i].compareTo(key) <= 0) {
            i++;
        }
        if(i < j) {
            target[j] = target[i];
            j--;
        }
    }

    targetArr[i] = key;
    
    this.quicksort(targetArr, start, i - 1);
    this.quicksort(targetArr, j + 1, end);
}
  • 堆排序【2】
private static int[] heapsort(int[] array) {
    //这步生成大根堆
    for(int i = array.length / 2 - 1; i >= 0; i--) {
        adjustHeap(array, i, length);
    }
    for(int j = array.length - 1; j >= 0; j--) {
        swap(array, 0, j);
        adjustHeap(array, 0, j);
    }
    return array;
}

private static void adjustHeap(int[] array, int start, int length) {
    int temp = array[start];
    for(int i = 2 * start + 1; i < length; i = 2 * i + 1) {
        if(i + 1 < length && array[i] < array[i+1]) {
            i++;
        }
        if(array[i] > temp) {
            swap(array, start, i);
            start = i;
        } else {
            break;
        } 
    }
}

private static void swap(int[] array, int a, int b) {
    int temp = array[a];
    array[a] = array[b];
    array[b] = temp;
}
  • KMP【3】:
private static int[] kmpNext(String destStr) {
    int[] next = new int[destStr.length()];
    next[0] = 0;
    for(int i = 1, int j = 0; i < dest.length(); i++) {
        while(j > 0 && destStr.charAt(i) != destStr.charAt(j)) {
            j = next[j - 1];
        }
        
        if(destStr.charAt(i) == dest.charAt(j)) {
            j++;
        }
        next[i] = j;
    }
    return next;
}

public static int kmp(String comparedStr, String destStr, int[] next) {
    for(int i = 0, j = 0; i < comparedStr.length(); i++) {
        while(j > 0 && comparedStr.charAt(i) != destStr.charAt(j)) {
            j = next[j - 1];
        }
        
        if(comparedStr.charAt(i) == destStr.charAt(j)) {
            j++;
        }

        if(j == dest.length() - 1) {
            return i - j + 1;
        }
    }
    return -1;
}

 

 

【1】https://blog.youkuaiyun.com/nrsc272420199/article/details/82587933    《快速排序---(面试碰到过好几次)》

【2】https://blog.youkuaiyun.com/u013384984/article/details/79496052    《白话讲排序系列(六) 堆排序(绝对让你明白堆排序!)》

【3】https://blog.youkuaiyun.com/starstar1992/article/details/54913261/    《KMP算法最浅显理解——一看就明白》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值