zoukankan      html  css  js  c++  java
  • 快排:大于等于的放右边

    左边的都小于key,右边的都大于等于key
    java实现:
    import java.util.*;
    public class Quick_Sort {
    public static void main(String[] args) {
    List<Integer> list = new ArrayList<>();
    Scanner in = new Scanner(System.in);
    while(in.hasNext()) {
    String s = in.nextLine().replace(" ", ""); //只针对0到9,范围以外需要修改输入判断
    int len = s.length();
    for (int i = 0; i < len; i++) { //去除无用空格,只针对0到9,范围以外需要修改输入判断
    list.add(Integer.parseInt(String.valueOf(s.charAt(i))));
    }
    q_rec(list,0,list.size()-1); //调用递归
    System.out.println(list);
    }
    }
    //排序方法,保证前面数小于key对应的数,后面数大于等于key对应的数
    private static int q_sort(List<Integer> list, int from, int to) {
    int start = from;
    int end = to;
    int key = list.get(start);
    while (start < end) {
    while (end > start && list.get(end) >= key) { //从后往前找到第一个小于key对应的数
    end--;
    }
    if (end > start) { //找到小于key的则覆盖
    list.set(start, list.get(end));
    start++;
    } else {
    break;
    }
    while (start < end && list.get(start) < key) { ////从前往后找到第一个大于等于key对应的数
    start++;
    }
    if (start < end) { //找到大于等于key的则覆盖
    list.set(end, list.get(start));
    end--;
    } else {
    break;
    }
    }
    list.set(start, key);
    return start;
    }
    //递归调用排序方法
    private static void q_rec(List<Integer> list ,int from,int to){
    if(from < to){
    int flag = q_sort(list, from, to);
    q_rec(list, from, flag-1);
    q_rec(list, flag+1, to);
    }
    }
    }
    js实现:
    function quick_swap(arr,start,end){
    var key = arr[start];
    var left = start;
    var right = end;
    while(left < right){
    while(left < right && arr[right] > key){
    right--;
    }
    if(left < right){
    arr[left] = arr[right];
    left++;
    }
    while(left < right && arr[left] <= key){
    left++;
    }
    if(left < right) {
    arr[right] = arr[left];
    right--;
    }
    }
    arr[left] = key;
    return left;
    }
    function quick_rec(arr,start,end){
    if(start < end){
    var flag = quick_swap(arr,start,end);
    quick_rec(arr,start,flag-1);
    quick_rec(arr,flag+1,end);
    }
    }
    function quick_sort(array){
    var arr = array.concat();
    var len = arr.length;
    quick_rec(arr,0,len-1);
    alert(arr);
    }
  • 相关阅读:
    ctrl+d与ctrl+c
    SIGTERM等信号含义
    truss命令
    strings命令
    touch命令
    C语言的readlink
    P1065 [NOIP2006 提高组] 作业调度方案
    P1786 帮贡排序
    P1098 [NOIP2007 提高组] 字符串的展开
    P1591 阶乘数码
  • 原文地址:https://www.cnblogs.com/zawjdbb/p/7125248.html
Copyright © 2011-2022 走看看