sort

快速排序算法

本秂侑毒 提交于 2019-12-28 03:48:19
快速排序算法 想必大多数程序员接触的第一种排序算法是冒泡排序,冒泡排序的特点是:逻辑简单,实现起来也不难,但在数据量比较大的时候性能比较低。 以数字由大到小的排序为例,写一个简单的冒泡排序。 /** * 冒泡排序 * Created by Administrator on 2017/4/4. */ public class BubblingSortArithmetic { /** * 冒泡排序实现 * @param array */ public static void bubblingSort(int[] array){ int temp; for (int i = 0; i < array.length-1; i++) { for (int j = 0; j < array.length-i-1; j++) { if(array[j] > array[j+1]){ temp = array[j]; array[j] = array[j+1]; array[j+1] = temp; } } } } } 我们看到,冒泡排序就是两个for循环嵌套,内层循环再加一个if语句做逻辑判断。 通俗点解释冒泡排序就是:外层循环控制冒泡的趟数(数组长度-1),内层循环控制一趟冒泡过程中数组相邻两个元素的比较次数及最大索引位,并且一趟冒泡把这次排序中最大的那个数放到最大索引位处。

02.python实现排序算法

若如初见. 提交于 2019-12-28 03:46:10
一、列表排序   将无序列表变为有序列表   应用场景: 榜单,表格, 给二分查找用,给其他算法用 二、python实现三种简单排序算法 时间复杂度O(n^2), 空间O(1) 1、冒泡排序 思路:   列表每两个相邻的数,如果前面的比后面的大,那么交换这两个数 代码实现: # 冒泡排序 @cal_time # 测试执行时间 def bubble_sort(li): for i in range(len(li)-1): # i表示第i趟 # 第i趟无序区位置【0,n-i-1】 for j in range(len(li)-i-1): if li[j] > li[j+1]: li[j], li[j+1] = li[j+1], li[j] # 最好情况 O(n^2) # 平均情况 O(n^2) # 最坏情况 O(n^2) # 优化改进>>> # 思路:如果冒泡排序中执行一趟而没有交换,则列表已经是有序状态,可以直接结束算法。 @cal_time def bubble_sort2(li): for i in range(len(li)): # 表示第i趟 exchange = 0 # 第i趟无序区的位置【0,n-i-1】 n是列表长度 for j in range(len(li)-i-1): if li[j] > li[j+1]: li[j], li[j+1] = li[j+1], li

排序---归并排序

我们两清 提交于 2019-12-27 19:10:52
写在前面的话: 一枚自学Java和算法的工科妹子。 算法学习书目:算法(第四版) Robert Sedgewick 算法视频教程:Coursera A lgorithms Part1&2 本文是根据《算法(第四版)》的个人总结,如有错误,请批评指正。 一、归并排序介绍 归并排序 (Mergesort)是建立在归并操作上的一种有效的排序算法,该算法是采用 分治法 (Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。 归并过程 :比较a[i]和a[j]的大小,若a[i]≤a[j],则将第一个有序表中的元素a[i]复制到aux[k]中,并令i和k分别加上1;否则将第二个有序表中的元素a[j]复制到aux[k]中,并令j和k分别加上1,如此循环下去,直到其中一个有序表取完,然后再将另一个有序表中剩余的元素复制到aux中从下标k到下标t的单元。归并排序的算法我们通常用递归实现,先把待排序区间[s,t]以中点二分,接着把左边子区间排序,再把右边子区间排序,最后把左区间和右区间用一次归并操作合并成有序的区间[s,t]。 分治法 解题的一般步骤: (1)分解,将要解决的问题划分成若干规模较小的同类问题; (2)求解,当子问题划分得足够小时,用较简单的方法解决;

通过查看mysql 配置参数、状态来优化你的mysql

邮差的信 提交于 2019-12-27 18:24:47
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> mysql的监控方法大致分为两类: 1.连接到mysql数据库内部,使用show status,show variables,flush status 来查看mysql的各种性能指标。 2. 直接使用mysqladmin查看其性能指标,例如: UserParameter=mysql.uptime,mysqladmin -uroot status|cut -f2 -d":"|cut -f1 -d"T" mysqladmin两个参数,status,extended-status shell > mysqladmin -uroot -ppassword variables status 可得到以下信息(后面详解) -------------------------------------------------------------------------------------------------------------------------- Uptime: 4557887 #mysql运行的秒数 Threads: 1 #连接数 Questions: 1684130 #The number of questions (queries) from clients since the server was

Linux查看程序打开文件个数

我的未来我决定 提交于 2019-12-27 18:07:42
很好的方法有2中 1.嵌入式Linux lsof -n |awk '{print $2}'|sort|uniq -c |sort -nr|more 2.正式的Linux系统 lsof -c 程序名称 |wc -l lsof -p 进程id |wc -l 查看所有进程的文件打开数 lsof |wc -l 来源: CSDN 作者: cyd411 链接: https://blog.csdn.net/cyd411/article/details/103732974

Net学习日记_ADO.Net_2_练习(省市联动)

柔情痞子 提交于 2019-12-27 10:57:41
页面: 数据库(粘贴,建库就可以) CREATE TABLE [dbo].[Ams_Area]( [ar_id] [int] NOT NULL, [ar_name] [varchar](50) NOT NULL, [ar_uid] [int] IDENTITY(1,1) NOT NULL, [ar_sort] [int] NOT NULL, [ar_uniCount] [int] NOT NULL, [ar_addtime] [datetime] NOT NULL, [ar_delflag] [bit] NOT NULL, CONSTRAINT [PK_Ams_Area] PRIMARY KEY CLUSTERED ( [ar_id] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] GO SET ANSI_PADDING OFF GO EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'地区表id' , @level0type=N'SCHEMA',

09-排序1 排序 (25 分)

二次信任 提交于 2019-12-27 08:00:26
给定 N个(长整型范围内的)整数,要求输出从小到大排序后的结果。 本题旨在测试各种不同的排序算法在各种数据情况下的表现。各组测试数据特点如下: 数据1:只有1个元素; 数据2:11个不相同的整数,测试基本正确性; 数据3:103个随机整数; 数据4:104个随机整数; 数据5:105个随机整数; 数据6:105个顺序整数; 数据7:105个逆序整数; 数据8:105个基本有序的整数; 数据9:105个随机正整数,每个数字不超过1000。 输入格式: 输入第一行给出正整数 N( ≤),随后一行给出 N个(长整型范围内的)整数,其间以空格分隔。 输出格式: 在一行中输出从小到大排序后的结果,数字间以1个空格分隔,行末不得有多余空格。 输入样例: 11 4 981 10 -17 0 -20 29 50 8 43 -5 输出样例: -20 -17 -5 0 4 8 10 29 43 50 981 #include<cstdio> const int maxn = 100010; void Bubble_sort(long* a,int n); void Insertion_sort(long* a,int n); void Select_sort(long *a,int n); void Shell_sort(long* a,int n); void Shell_sedgewick

LeetCode Wiggle Sort II

我的未来我决定 提交于 2019-12-27 05:16:07
Given an unsorted array nums , reorder it such that nums[0] < nums[1] > nums[2] < nums[3]... . Example 1: Input: nums = [1, 5, 1, 1, 6, 4] Output: One possible answer is [1, 4, 1, 5, 1, 6] . Example 2: Input: nums = [1, 3, 2, 2, 3, 1] Output: One possible answer is [2, 3, 1, 3, 1, 2] . Note: You may assume all input has valid answer. Follow Up: Can you do it in O(n) time and/or in-place with O(1) extra space? 这个题目,感觉好像很简单,就是把给定的数组进行排序,排序完成后,取一个最小元素然后再取一个最大元素好像就可以。但是经过测试用例的测试发现,有的数组包括很多大小重复的数字,这样的话,无论如何排序,始终有一个元素会出现等于的情况,就好比例子中的第二个,所以,排序好像是不行的。 最好的方法是将数组排序后分成两个数组,一个数组中装最大的数字partMax[]

kuangbin带你飞 后缀数组 题解

ⅰ亾dé卋堺 提交于 2019-12-27 04:23:20
2份模板 DC3 。 空间复杂度O3N 时间复杂度On #define F(x) ((x) / 3 + ((x) % 3 == 1 ? 0 : tb)) #define G(x) ((x) < tb ? (x) * 3 + 1 :((x) - tb) * 3 + 2) const int MAXN = 300010; const int MAXM = 100010; char input[MAXM]; int wa[MAXN],wb[MAXN],ws[MAXN],wv[MAXN],wsd[MAXN],r[MAXN],sa[MAXN]; char str[MAXN]; int dp[MAXM][25]; int c0(int *r,int a,int b) {return r[a] == r[b] && r[a + 1] == r[b + 1] && r[a + 2] == r[b + 2];} int c12(int k,int *r,int a,int b) {if(k == 2) return r[a] < r[b] || r[a] == r[b] && c12(1,r,a + 1,b + 1); else return r[a] < r[b] || r[a] == r[b] && wv[a + 1]< wv[b + 1];} void sort(int *r,int *a

后缀数组小结

馋奶兔 提交于 2019-12-27 04:23:03
目录 原理介绍 倍增算法 基数排序 数组含义 代码解释 height 数组的功能 例题讲解 洛谷P3809【模板】后缀排序 BZOJ : 1717: [Usaco2006 Dec]Milk Patterns 产奶的模式 BZOJ : 4566: [Haoi2016]找相同字符 前言 :Orz ShichengXiao 冬令营的时候就早解决了 字符串算法还是不能随意放弃啊 要认真学了!! 这个算法常用于解决字符串上的 \(\mathrm{LCP}\) 问题 和 一些字符串匹配的问题 这个算法思维难度不是很大 但是代码难度还是有一些的 想学好这个算法 一定要牢牢的记住各个数组的含义 不然容易弄混 原理介绍 还是先简单介绍一下原理吧 : 后缀数组就是将一个字符串的后缀全部进行排序 然后把下标存入一些数组里 用那些数组来进行字符串的一些常用操作 为了后缀排序 我们常常使用 \(O(n \log n)\) 的倍增算法 (而不用 \(O(n)\) 的 \(\mathrm{DC3}\) 因为它常数和空间大,并且十分不好写) 倍增算法 那接下来介绍一下倍增算法qwq 考虑这样一个小问题 我们比较任意两后缀的字典序大小 有没有什么快速比较的方法? 当然有 就是预处理出他们的一个前缀和后缀的大小关系 然后我们就能用另外两个来比较了。 倍增的思路大概就是如此 我们从小到大 每次长度乘二