精华内容
下载资源
问答
  • Java int数组类型数组降序排列的方法 前言:使用Java对int数据类型数组降序排列没有C++那样方便但是也是可以简单实现的。 方法一: public class Main { public static void main(String[] args) { int[] num =...

    Java int数组类型数组降序排列的方法

    前言:使用Java对int数据类型数组降序排列没有C++那样方便但是也是可以简单实现的。

    1.方法一:

    public class Main {
    
        public static void main(String[] args) {
            int[] num = {1, 9, 2, 6, 5};    //定义一个int数组
            for(int i = 0; i < num.length; i++) {
                System.out.print(num[i] + " "); //输出原来的数组
            }
            System.out.println();
            Arrays.sort(num);   //调用Arrays.sort()方法, 原数组升序排列。
            for(int i = 0; i < num.length / 2; i++) {   //原数组元素交换实现降序排列
                int temp = num[i];
                num[i] = num[num.length - 1 - i];
                num[num.length - 1 - i] = temp;
            }
            for(int i = 0; i < num.length; i++) {
                System.out.print(num[i] + " "); //输出降序排列的数组
            }
        }
    
    }
    

    运行结果:
    1 9 2 6 5
    9 6 5 2 1

    代码截图:

    在这里插入图片描述
    2. 方法二:

    import java.util.Arrays;
    import java.util.stream.IntStream;
    import java.util.stream.Stream;
    
    public class Main {
    
        public static void main(String[] args) {
            int[] num = {1, 9, 2, 6, 5};    //定义一个int数组
            for(int i = 0; i < num.length; i++) {
                System.out.print(num[i] + " "); //输出原来的数组
            }
            System.out.println();
            Integer[] Integernum = Arrays.stream(num).boxed().toArray(Integer[]::new);  //这一行代码和下面几行代码实现的功能相同
            /*//将int数组转换为Integer数组
            IntStream stream = Arrays.stream(num);  //将int数组转换为数值流
            Stream<Integer> integerStream = stream.boxed(); //将数值流中的元素全部装箱, 转换为流, int转为Integer。
            Integer[] Integernum = integerStream.toArray(Integer[]::new);   //将流转换为Integer数组*/
            Arrays.sort(Integernum, (a, b)->b - a); //使用lambda表达式对数组降序排列, 这一行代码和下面几行代码实现的功能相同。
            /*Arrays.sort(Integernum, (a, b)->{
                return b - a;
            });*/
            for(int i = 0; i < Integernum.length; i++) {
                System.out.print(Integernum[i] + " ");  //输出降序排列的数组
            }
            System.out.println();
        }
    
    }
    

    运行结果:
    1 9 2 6 5
    9 6 5 2 1

    代码截图:
    在这里插入图片描述
    在这里插入图片描述
    3.方法三:

    import java.util.Scanner;
    
    public class Main {
    
        public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
            int[] num = {1, 9, 2, 6, 5};    //定义一个数组
            for(int i = 0; i < num.length; i++) {
                System.out.print(num[i] + " "); //输出原来的数组
            }
            System.out.println();
            reverseOrderQuickSort(num, 0, num.length - 1); //调用降序排列的函数
            for(int i = 0; i < num.length; i++) {
                System.out.print(num[i] + " "); //输出降序排列的数组
            }
        }
    
        private static void reverseOrderQuickSort(int[] num, int left, int right) { //降序快速排序
            if(left < right) {
                int i = left, j = right, n = num[left];
                while(i < j) {
                    while (i < j && num[j] <= n) j--;
                    if(i < j) num[i++] = num[j];
                    while (i < j && num[i] > n) i++;
                    if(i < j) num[j--] = num[i];
                }
                num[i] = n;
                reverseOrderQuickSort(num, left, i - 1);    //数组左边的数字和数组右边的数字分别降序排序。
                reverseOrderQuickSort(num, i + 1, right);
            }
        }
    
    }
    

    运行结果:
    1 9 2 6 5
    9 6 5 2 1

    代码截图:
    在这里插入图片描述
    在这里插入图片描述

    总结:代码实现的是int类型数组的降序排列,其他数据类型数组的降序排列方法差不多,欢迎大家在下面留言表达自己的观点和想法,文章出现错误请大家积极指正,谢谢大家。

    展开全文
  • 数组降序排列

    2014-07-12 15:16:06
    [self.dic.allKeys sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2)  {   if ([obj1 floatValue]<[obj2 floatValue])  {  return NSOrderedAscending;  

    [self.dic.allKeys sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2)

        {

            if ([obj1 floatValue]<[obj2 floatValue])

            {

                return NSOrderedAscending;

            }

            else

            {

                return NSOrderedDescending;

            }

            

        }];

    展开全文
  • 前言数组和链表是两种数据结构,数组非常简单易用但是它有两个非常大的缺点,一个是数组一旦创建无法扩展,另一个则是数组的查找和删除的速度很慢.链表改善了一些数组的缺点,但是同样的链表自身也存在一些自己的缺点.本...

    前言

    数组和链表是两种数据结构,数组非常简单易用但是它有两个非常大的缺点,一个是数组一旦创建无法扩展,另一个则是数组的查找和删除的速度很慢.

    链表改善了一些数组的缺点,但是同样的链表自身也存在一些自己的缺点.

    本篇博客将为大家介绍一下这数组和链表特点及各自的优缺点.

    阅读前的准备工作

    大O表示法,一种粗略的评价计算机算法效率的方法.后面的内容会用到表示效率的方法.

    1. 数组

    我们按数组中的数组是否排序对数组进行划分,将数组分为无序数组和有序数组.无序数组中的数组是无序的,而有序数组中的数据则是升序或者降序排序的.

    1.1 无序数组

    因为无序数组中的数据是无序的,往数组中添加数据时不用进行比较和移动数据,所以往无序数组里面添加数据很快.无论是添加第一个数据还是第一万个数据所需的时间是相同的,效率为O(1).

    至于查找和删除速度就没有那么快了,以数组中有一万个数据项为例,最少需要比较1次,最多则需要比较一万次,平均下来需要比较5000次,即N/2次比较,N代表数据量,大O表示法中常数可以忽略,所以效率为O(N).

    结论:

    1. 插入很快,因为总是将数据插入到数组的空余位置.
    2. 查找和删除很慢,假设数组的长度为N,那么平均的查找/删除的比较次数为N/2,并且还需要移动数据.

    1.2 有序数组

    无序数组中存放的数据是无序的,有序数组里面存放的数据则是有序的(有可能是升序有可能是降序).

    因为有序数组中的数据是按升序/降序排列的,所以插入的时候需要进行排序并且移动数据项,所有有序数组的插入速度比无序数组慢. 效率为O(N).

    删除速度和无序数组一样慢 效率为O(N).

    有序数组的查找速度要比无序数组快,这是因为使用了一个叫做二分查找的算法.

    二分查找: 二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列.

    有一个关于二分查找的形象类比 -> 猜数游戏

    假设要在0-100之间猜一个数,那么你第一个要猜的数字就是100的一半50的时候,你的朋友会告诉你这个数字比要猜的数字是大还是小,如果比数字大,你接下来要猜的数字就是50的一半25,你的朋友说比这个数字要大,那么你下面要猜的数字就是25-50中间的那个数37,以此类推...

    20d0255353e566c35e94b55446a74430.png

    使用二分查找可极大的提高查找的效率,假设一个有序数组有十亿个数据,那么查找到所需的数字,最多只需比较30次.

    9acabc64e7813dc9a12b14d46ef7fb3f.png

    有序数组使用二分查找的效率为O(logN).有序数组也可以通过二分查找来新增和删除数据以提高效率,但是依然需要在新增/删除后移动数据项,所以效率依然会有影响.

    总结:

    1. 有序数组的查找速度比无序数组高,效率为O(logN)
    2. 有序数组的删除和新增速度很慢,效率为O(N)

    1.3 数组总结

    数组虽然简单易用,但是数组有两个致命的缺点:

    1. 数组存储的数量有限,创建的过大浪费资源,创建的过小溢出
    2. 数组的效率比其他数据结构低
    • 无序数组插入效率为O(1)时间,但是查找花费O(N)时间
    • 有序数组查找花费O(logN)时间,插入花费O(N)时间
    • 删除需要移动平均半数的数据项,所以删除都是O(N)的时间

    2. 链表

    数组一经创建大小就固定住了,无法修改,链表在这方面做出了改善,只要内存够用就可以无限制的扩大.

    链表是继数组之后应用最广泛的数据结构.

    2.1 链表的特点

    链表为什么叫链表呢? 因为它保存数据的方式就像一条锁链

    84ca8bf2bf8cb3ad439ea891099af198.png

    链表保存数据的方式很像上面的这一条锁链,每一块锁链就是一个链节点,链节点保存着自己的数据同时通过自己的next()方法指向下一个链节点. 链表通过链节点不断地调用next()方法就可以遍历链表中的所有数据.

    238cd1bc3d77e074cd512f68424d529e.png

    在链表中,每个数据项都被包含在"链节点"(link)中,一个链结点是某个类的对象,这个类可以叫做Link.因为一个链表中有许多类似的链结点,所以有必要用一个不同于链表的类来表达链结点.

    每个Link对象中都包含一个对下一个链结点引用的字段(通常叫做next).

    链表本身的对象中有一个字段指向对第一个链结点的引用.

    数据与链表查找数据的区别: 在数组中查找数据就像在一个大仓库里面一样,一号房间没有,我们去二号房间,二号房间没有我们去三号房间,以此类推.. 按照地址找完所有房间就可以了.

    而在链表中查找数据就像单线汇报的地下工作者,你是孤狼你想要汇报点情报给你的顶级上司毒蜂,但是你必须先报告给你的接头人猪刚鬣,猪刚鬣在报告给它的单线接头人土行孙,最后由土行孙报告给毒蜂.只能一个找一个,这样最终完成任务.

    2.2 Java代码

    链节点类:

    /** * @author liuboren * @Title: 链节点 * @Description: * @date 2019/11/20 19:30 */public class Link { // 保存的数据 public int data; // 指向的下一个链节点 public Link nextLink; public Link(int data) { this.data = data; } public int getData() { return data; } public void setData(int data) { this.data = data; } public Link getNextLink() { return nextLink; } public void setNextLink(Link nextLink) { this.nextLink = nextLink; }}

    链表类

    /** * @author liuboren * @Title: 链表类 * @Description: * @date 2019/11/20 19:31 */public class LinkList { private Link first; public LinkList() { first = null; } // 新增链节点方法 public void insertFirst(int data) { Link link = new Link(data); link.setNextLink(first); first = link; }}

    在新增节点的时候,新增的link的next方法指向原来的first节点,并将链表类的first指向新增的节点.

    2.4 其他链表

    刚刚介绍的链表是单向链表,只能从后往前遍历,其他的链表还有双端链表、双向链表、有序链表.

    再简单介绍一下双端链表吧.

    双端链表就是在单向链表的基础上,新增一个成员变量指向链表的最后一个对象.

    双端链表代码:

    /** * @author liuboren * @Title: 链表类 * @Description: * @date 2019/11/20 19:31 */public class LinkList { private Link first; private Link last; public LinkList() { first = null; } public boolean isEmpty() { return first == null; } // 新增链节点方法 public void insertFirst(int data) { Link newLink = new Link(data); newLink.setNextLink(first); if (isEmpty()) { last = newLink; } first = newLink; }}

    双向链表则是可以从first和last两个方向进行遍历,有序链表的数据都是按照关键字的顺序排列的,本文不再展开了.

    2.5 链表的效率

    链表的效率:

    • 表头 插入和删除速度都很快,花费O(1)的时间.
    • 平均起来,查找&删除&插入在制定链节点后面都需要搜索一半的链节点需要O(N)次比较,虽然数组也需要O(N)次比较,但是链表让然要快一些,因为不需要移动数据(只需要改变他们的引用)

    3. 总结

    链表解决了数组大小不能扩展的问题,但是链表自身依然存在一些问题(在链表的链节点后面查找&删除&插入的效率不高),那么有没有一种数据结构即拥有二者的优点又改善了二者的缺点呢,答案是肯定的,

    展开全文
  • 1.求1000以内能被3或5整除的数字的和 s = 0 for i in range(0,1000): if i % 3 == 0 or i % 5 == 0: ...2.在一个数组内移除指定的数字,并返回新的数组降序排列 listd = [1,6,6,3,6,2,10,2,100,59,78,2] print(...

    1.求1000以内能被3或5整除的数字的和

    s = 0
    for i in range(0,1000):
        if i % 3 == 0 or i % 5 == 0:
            s = s + i
            print(i,s)

    2.在一个数组内移除指定的数字,并返回新的数组降序排列

    listd = [1,6,6,3,6,2,10,2,100,59,78,2]
    print(listd)
    a = input('请输入需要去除的数字:')
    def func(list1):
        list_1 = []
        for i in list1:
            if int(i) != int(a):
                list_1.append(i)
        return list_1
    
    y = func(listd)
    y.sort(reverse = True)    #列表降序
    print(y)

    3.汉诺塔游戏步骤(参考小甲鱼)

    def Hanoi(n,x,y,z):
        if n == 1:
            print(x,' --> ',z)
        else:
            Hanoi(n-1,x,z,y)    #将n-1个盘子从x移动到y上
            print(x,' --> ',z)  #将最底下的最后一个盘子从x移动到z上
            Hanoi(n-1,y,x,z)    #将n-1个盘子从y移动到z上
            
    number = int(input('请输入汉诺塔层数:'))
    print('步骤为:')
    step = Hanoi(number,'x','y','z')

     

    展开全文
  • 学习Excel技术,关注微信公众号:excelperfect本次的练习是:如下图1所示,在工作表中存储着捐款数据。图1现在要获取大于某...第1步:获取捐款金额并降序排列在单元格G2中输入数组公式:=IFERROR(LARGE(IF($D$2:$...
  • 这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名“冒泡排序”。话不多说,代码实现(java开发环境:jdk8idea):①...
  • 1.使用API‘subset’ tuple_sort_index (Row, Indices) NewRow:=[] NewColumn:=[] if(Length>=1) *方法1 NewRow:=subset(Row,Indices) NewColumn:=subset(Column,...2.使用一个for循环,使数组逆序排列 for
  • 目录1 一维数组排序-----1.1 升序排列-----1.2 降序排列-----1.3 含有相同元素的一维数组排序-----1.4 使用 numpy.sort&numpy.argsort 是否会改变原数组2 二维数组排序-----2.1 行的升序排列-----2.2 列的升序...
  • javasort降序排序 可以将升序的数组倒序输出,即可实现降序排序了。 或者实现一个自己的数组反转方法. public class Main { public static void main(String args[]) { int[] arr = {1, 4, 612, 333, -8, 2, -12, ...
  • System.out.println("请输入产生数组的数为:、\n0表示全为正数\n1表示全为负数\n2表示有负有正"); ed=s.nextInt(); T t=new T(x,y,ed); System.out.println("未排序"); t.print(); t.shor(t.a); System.out....
  • System.out.println("请输入产生数组的数为:、\n0表示全为正数\n1表示全为负数\n2表示有负有正"); ed=s.nextInt(); T t=new T(x,y,ed); System.out.println("未排序"); t.print(); t.shor(t.a); System.out....
  • java中对数组进行排序使用Array.sort() 这个默认是升序@Testpublic void index4(){int scores[] = new int[]{1,2,3,89,4};Arrays.sort(scores);...}}如果想降序怎么办呢?使用:Arrays.sort(scores,Collect...
  • System.out.println("请输入产生数组的数为:、\n0表示全为正数\n1表示全为负数\n2表示有负有正"); ed=s.nextInt(); T t=new T(x,y,ed); System.out.println("未排序"); t.print(); t.shor(t.a); System.out....
  • System.out.println("请输入产生数组的数为:、\n0表示全为正数\n1表示全为负数\n2表示有负有正"); ed=s.nextInt(); T t=new T(x,y,ed); System.out.println("未排序"); t.print(); t.shor(t.a); System.out....
  • 数组排序(冒泡排序)知乎视频​www.zhihu.com本套...Java精讲视频六大板块----带你轻松入门Java​mp.weixin.qq.com一、冒泡排序排序就是对数组的元素进行升序或者降序排列,这种操作属于一种算法,排序的方式有很多...
  • 我们今天分享的是FILTER函数,她完美展现了365函数世界动态数组的理念;运算高效、公式简洁、还可以作为中转表的性质用于其它函数二次计算。基础语法在日常数据处理中,我们经常会遇到一对多式的数据查询问题。所谓...
  • 比如,当我们需要求一个数组中所有元素的平均值时,操作很简单,只需要去遍历这个数组,并将其内部所有元素中存储的内容进行求和,最后用所有元素内容的和去除以元素个数,就可以得到最终数组的平均值。这个问题很...
  • 题目描述实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。...示例:1,2,3 → 1,3,23,2,1 → 1,2,31,1,5 → 1,5,1代码实现首先观察一个数组1 2 7 4 3 1 ,他的下一个...
  • 如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。必须原地修改,只允许使用额外常数空间。以下是一些例子,输入位于左侧列,其相应输出位于右侧列。 1,2,3 → 1,3,2 ...
  • 这些有序排列的数据元素的集合称为数组。可用下标访问数据的元素,记得下标从0开始,而不是1。好多编程语言要求数组元素的数据类型是相同的,而微信小程序的,可以不同。在微信小程序中,可用var a=[] 生成一个新的...
  • 具体来说,我的代码是:>>> x = np.array([[2, 3], [1998,5], [1998,7]])>>> x = x[np.argsort(x[:,0])]但输出是array([[ 2, 3],[1998, 5],[1998, 7]])但我需要按降序排列.有人能解释我怎么做吗?编辑:@Babyburger...
  • 本文实例讲述了JS实现数组按升序及降序排列的方法。分享给大家供大家参考,具体如下:数组数字大小排序让数组按照升序降序排列这里写个数组 var array=[1,80,4,33,21,55];升序输出:var array=[1,80,4,33,21,55];...
  • package cn.itcast.demo; /** @Description @auther lenovo @create 2019-09-19 21:44 */ public class Test9 { public static void main(String args[]) { int[] nums = {21, 23, 65, 34, 97...for (int i = ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,684
精华内容 673
关键字:

数组降序排列