NC140 排序

这篇博客详细介绍了10种常见的排序算法,包括选择排序、冒泡排序、插入排序、二分插入排序、希尔排序、归并排序(递归与非递归)、堆排序、快速排序、计数排序和桶排序。每种排序算法都提供了Java实现,并附有运行时间和内存占用的比较。
摘要由CSDN通过智能技术生成

目录

一、排序算法:

二、题目描述

三、运行时间比较

四、分析及代码

1. 选择

2. 冒泡

3. 插入

4. 二分插入排序

5. 希尔排序

6. 归并排序

递归(自顶向下):

非递归(自底向上):

7.堆排序

8. 快速排序

9.  计数排序

10. 桶排序


一、排序算法:

常见的排序算法——常见的10种排序 - sc_FlyingDreams - 博客园

常用排序算法总结(一) - SteveWang - 博客园

二、题目描述

给定一个数组,请你编写一个函数,返回该数组排序后的形式。

示例1

输入:[5,2,3,1,4]

返回值:[1,2,3,4,5]

示例2

输入:[5,1,6,2,5]

返回值:[1,2,5,5,6]

备注:

数组的长度不大于100000,数组中每个数的绝对值不超过10^9109

三、运行时间比较

常见排序方法运行时间内存对比表
运行时间 占用内存
冒泡 49ms 10872KB
选择 52ms 10864KB
插入 44ms 10952KB
二分插入 42ms 10908KB
希尔 38ms 10880KB
归并(自顶向下) 39ms 10960KB
归并(自底向上) 39ms 10840KB
52ms 10752KB
快速 50ms 11228KB
计数/基数/桶

四、分析及代码

1. 选择

每次循环选取最小元素放在开始位置,开始位置依次向后,直到完成排序。

  import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     * 将给定数组排序
     * @param arr int整型一维数组 待排序的数组
     * @return int整型一维数组
     */
    public int[] MySort (int[] arr) {
        // write code here
        if(arr.length == 0) return arr;
        for(int i = 0;i < arr.length;i++){
              for(int j = i+1;j < arr.length;j++){
                if(arr[j] < arr[i]){
                    swap(i,j,arr);
                }
            }
        }
        return arr;
    }
    public void swap(int i,int j,int[] arr){
        int temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
    }
}

提交结果:答案正确 运行时间:52ms 占用内存:10864KB 使用语言:Java 用例通过率:100.00% 

2. 冒泡

相邻对比,如果大于后一位,相邻位置交换,最大数升到最后一位;外层循环控制循环次数,每次循环找到第i+1大数放到倒数i+1位(i从0开始)。

(小值降到最前面代码循环条件好写)

相邻对比,如果小于前一位,相邻位置交换,最小数降到第一位;外层循环控制循环次数,每次找到第i+1小数放到第i+1位(i从0开始)。

相对选择排序稳定,因为除正在交换两位置之外,其他数字位置相对不变。

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     * 将给定数组排序
     * @param arr int整型一维数组 待排序的数组
     * @return int整型一维数组
     */
    public int[] MySort (int[] arr) {
        // write code here
        if(arr.length == 0) return arr;
        int tmp;
        for(int i = 0;i < arr.length;i++){
            for(int j = 0;j < arr.length-1-i;j++){
                if(arr[j] > arr[j+1])
                    swap(j,j+1,arr);
            }
        }
        return arr;
    }
    public void swap(int i,int j,int[] arr){
        int tmp;
        tmp = arr[i];
        arr[i] = arr[j];
        arr[j] = tmp;
    }
}

提交结果:答案正确 运行时间:49ms 占用内存:10872KB 使用语言:Java 用例通过率:100.00% 

3. 插入

思路:通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据提供的引用内容,可以看出对于nc 65表体排序的步骤如下所示: 1. 首先,需要根据要求排好数据行的顺序,可以使用行号进行排序。 2. 找到`nc.impl.pub.ace.AceCmp_paymesPubServiceImpl`类,该类是单据从元数据走完向导时自动生成的。 3. 在该类中找到`pubquerybills`方法,该方法包含了对查询数据进行排序的逻辑。 4. 修改`pubquerybills`方法中的查询语句,将查询结果按照要求的排序方式进行排序。具体的修改方式是在`query.query`方法的第二个参数中添加排序语句,例如`"order by dbilldate desc, vbillcode desc"`。 5. 完成以上修改后,保存并重新编译项目,以使修改生效。 通过以上步骤,就可以实现对nc 65表体数据的排序。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [NC65卡片、列表刷新排序](https://blog.csdn.net/D_C_Hao/article/details/85081811)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [NC65对单表单据查询的结果进行排序](https://blog.csdn.net/bronzehammer/article/details/108853902)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值