sort

C++中sort函数的用法汇总

感情迁移 提交于 2020-01-22 03:25:32
最近写题的时候总会在贪心算法里面用到C++函数sort函数排序的方法,故在此总结一下 sort函数本身是对一段连续的存贮单元的数据进行排序的函数,其排序的元素可以是数值,亦可以是一组数据(结构体),其算法比正常的冒泡排序法,选择排序法,希尔排序要简便,故对于算法的简化大有帮助 1.将一段数据按升序排列 # include <cstdio> # include <algorithm> //sort函数储存在C++的algorithm函数库中 using namespace std ; int main ( ) { int a [ 10 ] = { 2 , 3 , 4 , 1 , 2 , 67 , 23 , 24 , 156 , 678 } ; int i ; sort ( a , a + 10 ) ; //对一段连续的存储空间进行排序 for ( i = 0 ; i < 10 ; i ++ ) printf ( "%d " , a [ i ] ) ; printf ( "\n" ) ; return 0 ; } 2.将一段数据按照降序排列 # include <cstdio> # include <algorithm> //sort函数储存在C++的algorithm函数库中 using namespace std ; bool compare ( int a , int b ) {

PAT (Advanced Level) 1067 Sort with Swap(0, i)

有些话、适合烂在心里 提交于 2020-01-21 18:55:48
题解    贪心。    若 0 的不在它的位置,那么 0 占的那个元素的位置,就和那个元素交换。    若 0 在它的位置,找一个没有归位的元素与 0 交换。 代码 #include<bits/stdc++.h> using namespace std; int arr[100005]; int main() { int i,n,x,cnt=0; scanf("%d",&n); for(i=0;i<n;i++) { scanf("%d",&x); arr[x]=i; } for(i=1;i<n;i++) { if(i!=arr[i]) { while(arr[0]!=0) { swap(arr[0],arr[arr[0]]); cnt++; } if(i!=arr[i]) { swap(arr[0],arr[i]); cnt++; } } } printf("%d",cnt); system("pause"); return 0; } 来源: https://www.cnblogs.com/VividBinGo/p/12222708.html

ArrayList排序sort

 ̄綄美尐妖づ 提交于 2020-01-21 15:10:43
ArrayList排序sort 使用ArrayList的sort(Comparator<?> comparator)进行排序 方法一:list.sort(); /** * 降序排序 */ private ArrayList<BaseItem> sortItem(ArrayList<BaseViewItem> list){ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { list.sort((o1, o2) -> { long date1 = 0; long date2 = 0; if (o1 instanceof ViewItem){ ViewItem item = (ViewItem) o1; date1 = Long.valueOf(dateToStamp(item.getDate())); } else { TaskViewItem item = (TaskViewItem) o1; date1 = Long.valueOf(dateToStamp(item.getDate())); } if (o2 instanceof SheetItem){ SheetItem item = (SheetItem) o2; date2 = Long.valueOf(dateToStamp(item.getDate())); }

最坏情况为线性时间的选择算法

别说谁变了你拦得住时间么 提交于 2020-01-21 04:44:34
求给定输入中第k大的数的算法。 这是一个常见面试题,通常的解法也很明显,使用类似快排的思想。 每趟运行,把数组的值分成两部分,一部分比pivot大,一部分比pivot小,因为我们知道pivot在数组中的位置,所以比较k和pivot的位置就知道第k大的值在哪个范围,我们不断的进行recursion, 直到pivot就是第k大的值。 这个算法的时间预期是O(n)。这里需要注意的是讲的仅限于它的预期,对于这个算法,其在最差情况下,时间复杂度则为n的平法。 参阅 快速排序的无敌对手 一文,我们是可以构建出一个这样的序列的。最简单的情况,每趟快排的时候我们以第一个为主元,那么对于一个已经排序好的序列,我们要找最大的数,最后的时间花费就退化成了n的平方。 《算法导论》9.3章给出了一个最差情况也为线性O(n)的算法。 Step 1:把数组划分为若干个子数组,每个子数组里包含5个数,因为会有无法整除的可能,所以最后一个子数组会小于5. Step 2:用插入排序把这5个数排序,然后找出中位数,也就是第3个。 Step 3:把获得的中位数又排序 (这个地方错误,不是排序,应该递归调用SELECT) ,找出中位数的中位数x(如果有偶数个中位数,为了方便,约定x是较小的中位数)。 Step 4:把原来的数组使用类似快排的方法,分成两个部分。让k比划分的低区中的元素数目多1,因此x是第k小元素,并且有n

Python开发 之 Python3打包(windows/linux)详解

心已入冬 提交于 2020-01-21 03:48:42
文章目录 1、唠唠叨叨 2、背景 3、Python打包工具 3.1、py2exe 3.2、cx_Freeze 3.3、PyInstaller 4、Windows打包 4.1、单个文件打包 4.1.1、核心源码 4.1.2、程序运行 4.1.3、打包 4.1.4、打包后效果 4.2、多个文件打包 4.2.1、核心源码 4.2.2、程序运行 4.2.3、打包 4.2.4、打包后效果 4.3、多层文件打包 4.3.1、核心源码 4.3.2、程序运行 4.3.3、打包 4.3.4、打包后效果 4.4、多层文件打包(加图标该可执行程序名称) 4.4.1、核心源码 4.4.2、程序运行 4.4.3、打包 4.4.4、打包后效果 5、Linux打包 5.1、多层文件打包 5.1.1、核心源码 5.1.2、程序运行 5.1.3、打包后效果 5.2、遇到的错误,以及解决方案 5.2.1、错误1(找不到pyinstaller) 5.2.2、错误2(rebuild your Python with `--enable-shared`) 5.2.3、错误3(找不到 libpython3.6m.so.1.0) 6、Github源码分享 1、唠唠叨叨 最近项目中需要Python的打包,看到网上也没有很详细的资料,于是做了一些示例程序。小小的研究了一下,Python如何在Windows和Linux上打包

分页排序小计

霸气de小男生 提交于 2020-01-20 21:22:56
public Sort getSort(Pager pager) { Sort sort = null; try { ArrayList orders; int i; Sort.Order order; if (pager.getExtString().equals("DESC")) { if (pager.getSortFields().length == 1) { sort = Sort.by(new Sort.Order[]{new Sort.Order(Sort.Direction.DESC, pager.getSortFields()[0])}); } else { orders = new ArrayList(); for (i = 0; i < pager.getSortFields().length; ++i) { order = new Sort.Order(Sort.Direction.DESC, pager.getSortFields()[i]); orders.add(order); } sort = Sort.by(orders); } } if (pager.getExtString().equals("ASC")) { if (pager.getSortFields().length == 1) { sort = Sort.by(new Sort

清北学堂—2020.1提高储备营—Day 1 afternoon

橙三吉。 提交于 2020-01-20 19:07:22
qbxt Day 1 afternoon ——2020.1.17 济南 主讲:李佳实 目录一览 1.二分法 2.分治 3.贪心 总知识点:基础算法 一、二分法 (1)算法分析:二分法是一种暴力枚举的优化版,它可以使时间复杂度大大减少,从而达到优化的效果。它同时又是一种典型的 分治 思想的应用。 (2)本质:把待求解问题分为两部分,每一部分分别求解。 (3)解决问题: 具有单调性质的题 (4)时间复杂度:若暴力枚举要O(N),那二分需要O(log N)、 (5)代码框架: 整数版: --------------------------------------------------------------------------------------------- 小数版: (6)例题:派 分析:首先这个题我们看到就能想出一种最直接的方法——暴力枚举扫一遍。这样做方法显然没问题,但是时间复杂度上不可行,显然会TLE。我们要优化这个方法,使他能卡过去。二分法就是一种很好的方法。我们先枚举扫一遍,再二分,求得正确答案。 代码: #include<iostream> #include<cstring> #include<cstdio> #include<algorithm> #define N 1000 #define M 1000 using namespace std; int n

Linux速查手册

99封情书 提交于 2020-01-20 10:45:49
文件相关 文件查看 文件操作 文件查找 压缩解压 内存进程 进程相关 系统信息 磁盘信息 日志相关 日志处理 其他 其他操作 toc 文件相关 文件查看 #显示隐藏文件 ls -al #显示包含数字的文件名和目录名 ls *[0-9]* #查看文件有多少行 wc -l filename cat xxx|wc -i #查看文件夹内的文件数目 ls -l | grep '^-' | wc -l #查看文件前10行 head -n 10 xxx.txt #从第3000行开始,显示1000行。即显示3000~3999行 cat filename | tail -n +3000 | head -n 1000 #显示1000行到3000行 cat filename| head -n 3000 | tail -n +1000 #查看当前文件夹大小 du -sh #统计当前文件夹(目录)大小,并按文件大小排序 du -sh * | sort -n #查看指定文件大小 du -sk filename #查找当前目录中的所有jar文件 ls -l | grep '.jar' 文件操作 #复制文件 cp source dest #递归复制整个文件夹 cp -r sourceFolder targetFolder cp -R /home/jenkins_home/. /var/html

列表排序

时间秒杀一切 提交于 2020-01-20 00:13:46
一. 列表查询 """要求:从列表中查询指定元素输入:列表,待查询元素输出:元素下标或未查找到元素方法: 1. 顺序查找 2. 二分查找(列表为升序)""" # 顺序查找 def linear_search(data_set, value): for i in range(len(data_set)): if data_set[i] == value: return i return print(linear_search([12, 3, 4, 5, 3, 6, 7], 3)) # 二分查找 def bin_search(data_set, value): left = 0 right = len(data_set) - 1 while left <= right: mid = (left + right) // 2 if data_set[mid] == value: return mid elif data_set[mid] > value: right = mid - 1 elif data_set[mid] < value: left = mid + 1 print(bin_search(sorted([12, 3, 4, 5, 3, 6, 7]), 3)) # 二分查找(递归版) def bin_search_rec(data_set, value, left,

Leetcode905 Sort Array By Parity

ぐ巨炮叔叔 提交于 2020-01-19 23:31:44
public int[] sortArrayByParity(int[] A) { LinkedList<Integer> list = new LinkedList<Integer>(); for (int i = 0; i < A.length; i++) { if (A[i] % 2 == 0) { list.add(A[i]); } } for (int j = 0; j < A.length; j++) { if (A[j] % 2 == 1) list.add(A[j]); } for (int k = 0; k < A.length; k++) { A[k] = list.get(k); } return A; } 只打败了百分之5的时间复杂度,而且需要O(n)的空间 方法解析里用到了位置交换,一开始也想到了原地置换,但是没想出来解决办法 dicuss里提出 从第一个元素开始遍历 是奇数的话直接跳过 是偶数的话 则和另一个浮标表示的奇数进行替换 因为前面遍历的时候 走过的都是奇数元素 后面直接把偶数元素换到前面就好了 然后奇数去了后面偶数的位置 偶数的前面都是奇数 这样就完成了替换 public int[] sortArrayByParity(int[] A) { for(int i=0,j=0;j<A.length;j++){ if(A[j]%2==0){ int