NC140 排序,2021-4-27

本文介绍了三种常见的排序算法:冒泡排序、插入排序和快速排序。冒泡排序和插入排序的时间复杂度均为O(n^2),可能导致超时问题,而快速排序的时间复杂度为O(n*logn),在效率上更优。文章通过代码实现展示了这三种排序算法的工作原理。
摘要由CSDN通过智能技术生成

NC140 排序

https://www.cnblogs.com/onepixel/p/7674659.html
https://www.runoob.com/w3cnote/sort-algorithm-summary.html

简单冒泡,时间复杂度O(n^2),超时不通过

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

插入排序,时间复杂度O(n^2),超时不通过

    vector<int> MySort(vector<int>& arr) {
        // write code here
        int i,j;
        int preIndex=0;
        int length=arr.size();
        int current;
        for (i=1;i<length;i++)
        {   
            preIndex=i-1;         //排完序的部分
            current=arr[i];       //现在比较的数
            while (preIndex>=0 && arr[preIndex]>current) 
            {     //当前值比排完序中数小时执行,把排完序中大的那个值后放一位
                arr[preIndex + 1] = arr[preIndex]; //若有多个,则都后放
                preIndex--; 
//不会出现多个大于中间出现一个小于,因为是从序号1开始,那么排完序的必然是从小到大,避免了覆盖丢失的问题。
            }
            arr[preIndex+1]=current;   //最后再把当前值插入,
        }
        
        return arr;
    }
};

快速排序,时间复杂度O(n*log n),通过

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     * 将给定数组排序
     * @param arr int整型vector 待排序的数组
     * @return int整型vector
     */
    vector<int> MySort(vector<int>& arr) 
    {
        // write code here
        quicksort(arr, 0, arr.size()-1);
        return arr;
    }
    
    void quicksort(vector<int>& arr,int left,int right)
    {
        if(left>right)
            return;
        
        int stan_index=quicksort_part(arr,left,right);
        quicksort(arr,left,stan_index-1);     //对标杆左边的子数组排序
        quicksort(arr,stan_index+1,right);     //对标杆右边的子数组排序
    }
    
    int quicksort_part(vector<int>& arr,int left,int right)
    {
        //int standard=right;   //最右边第一个为标杆,可以省略这个变量,用right
        //int count=0;      错误!!!!! 这样在运行时会一直从arr[0]开始调换!!!
        int count=left;
        while(left<right)
        {
            if(arr[left]<arr[right])
            {
              swap(arr[left],arr[count]);
              count++;//计数,比标准小的个数,其实也是记住第一个比标准大的索引,最后将标准与此交换
   //举例,arr为 0大 1小 2大 3小 4小 5标准
   //当arr[0]比标准大,则处理后conut=0,left=1    0大
   //遇到arr[1]小于标准时,把arr[0]和arr[1]交换,即把大的放到了arr[1]然后count=1,left=2  1小 0大
   //遇到arr[2]大于标准时,count=1,left=3   此时 1小 0大 2大
   //遇到arr[3]小于标准时,交换arr[1]和arr[3],此时 1小 3小 2大 0大,count=2,left=4
   //遇到arr[4]小于标准时,交换arr[2]和arr[4],此时1小 3小 4小 0大 2大 5标准
   //count=3,left=5
   //最后交换 arr[count],arr[right],即交换arr[3],arr[5] 
            }
              left++;//到下一位处理
        }
        swap(arr[count],arr[right]);    //找到数组中所有小于标准的个数,则标准放在arr[count]处
        return count;
    }
    
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 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、付费专栏及课程。

余额充值