美文网首页
重排数组负数在前非负在后

重排数组负数在前非负在后

作者: KM_0d16 | 来源:发表于2019-09-24 23:27 被阅读0次

设计一个算法:要求在O(n)的时间内重排数组a[0...n-1],将所有取负值的关键码排在所有取非负关键码的前面

实现思路

根本上就是快排partition一趟的过程。我们只需要在快排上稍作改动即可。
可与快排代码比较(在另外一篇博客中)

实现代码

public class Partition {

    public static int[] sort(int[] a, int key) {
        if (a == null && a.length <= 1) {
            return a;
        }
        int high = a.length - 1;
        int low = 0;
        while(low < high) {
            while (low < high && a[high] >= key) high--;
            if(low < high) {
                //直接等于的话会丢失第一个元素
                swap(a,low,high);
                low++;
            }
            while (low < high && a[low] < key) low++;
            if(low < high) {
                swap(a,low,high);
                high--;
            }
        }
        return a;
    }

    public static void swap(int[] a, int i, int j) {
        int temp = a[i];
        a[i] = a[j];
        a[j] = temp;
    }
}

测试代码

public class Test {
    public static void main(String[] args) {
        int[] b = {1, 2, -3, -2, 3, -2, -4, 22, 3, 4, -2};
        int[] result = Partition.sort(b,0);
        System.out.println(Arrays.toString(result));
    }
}
输出结果:[-2, -4, -3, -2, -2, 1, 3, 22, 3, 4, 2]

相关文章

  • 重排数组负数在前非负在后

    设计一个算法:要求在O(n)的时间内重排数组a[0...n-1],将所有取负值的关键码排在所有取非负关键码的前面 ...

  • 前端小知识10点(2019.5.18)

    1、当给数组的index赋负数或小数时,数组的长度有无变化? 由此可见,array的length属性只计算非负整数...

  • 非负矩阵分解(matlab实现)

    假设由n个非负样本数据组成的非负数据矩阵X,非负矩阵分解的目标是将非负数据矩阵X分解为基矩阵W和系数矩阵H的乘积,...

  • 数组拼接为最大数(Leetcode179)

    题目 给定一个数组存储的是非负数字,将其重排形成一个最大的数字 举例,输入input[10, 2],输出"210"...

  • 分数的四则运算

    1、分数的表示 2、分数的化简1、负分数的情况:使down为非负数,如果分数为负,则令up为负数即可2、分数为0的...

  • study_go_day3 数组

    package main import "fmt" /**数组 * 定义数组数量在前类型在后 * 可以通过[......

  • 刷leetCode算法题+解析(三十六)

    周末周末,今天的目标五道题就好~~~加油! 数组的度 题目:给定一个非空且只包含非负数的整数数组 nums, 数组...

  • 无监督学习 - 降维 - NMF

    非负矩阵分解在距震中所有元素均为非负数约束条件之下的矩阵分解方法。 基本思想:给定一个非负矩阵V,NMF能够找到一...

  • 列表排序/去重

    要求 1.正数在前负数在后2.整数从小到大3.负数从大到小 详解: 默认情况下内置的sort和sorted函数接收...

  • 位操作符

    负数表示负数绝对值的二进制的反码加一 按位非 (~) ~num ---> 返回num的反码 本质:操作数的负...

网友评论

      本文标题:重排数组负数在前非负在后

      本文链接:https://www.haomeiwen.com/subject/ceamuctx.html