sort

排序算法 java实现

不问归期 提交于 2020-03-26 01:44:54
为了笔试,用了一下午准备了下各种排序算法的java实现。给大家提供个方便,把代码都贴出来,算法的具体过程以后再补。 冒泡排序 1 package sort; 2 3 public class BubbleSort { 4 public static void swap(int[] source,int x,int y){ 5 int temp=source[y]; 6 source[y]=source[x]; 7 source[x]=temp; 8 } 9 /* 10 * 每次将最大的气泡沉底,需要(n-1)趟扫描,每次扫描(n-i)次 11 * 复杂度O(n2) 12 * 稳定 13 */ 14 public static void sort(int[] source){ 15 for(int i=source.length-1;i>0;i--){ 16 for(int j=0;j<i;j++){ 17 if(source[j]>source[j+1]) 18 swap(source, j, j+1); 19 } 20 } 21 } 22 23 public static void main(String[] args) { 24 int[] source={9,3,6,2,1,8,4,5}; 25 sort(source); 26 for (int i = 0; i <

python排序算法实现:

ε祈祈猫儿з 提交于 2020-03-26 01:44:08
选择排序: def sel_sort(arr): i=0; length =len(arr) while i<length: j = i+1 min = arr[i] while j<length: if arr[j]<min: min = arr[j] arr[j] = arr[i] arr[i] = min j+=1 i+=1 return arr 插入排序: def insert_sort(arr): i =1 while i <=len(arr)-1: key = arr[i]; j =i -1 i +=1 while j >=0 and arr[j]>key: arr[j+1] = arr[j] j -=1 arr[j+1] = key return arr a = insert_sort([1,2,4,3]) print(a) 归并排序: #子问题程序(对两组已排序数组进行合并排序)最小子程序数组长度为2,即p=q时 #0<=p<=q<r<=len(a), def merge(arr,p,q,r): left = arr[p:q+1] right = arr[q+1:r+1] left.append(100000)#哨兵 right.append(100000) i=0;j=0; k=r+1; while p<k: if left[i]<=right[j]:#比较

shell学习(5)- sort

可紊 提交于 2020-03-25 02:53:28
Linux sort命令用于将文本文件内容加以排序。 sort可针对文本文件的内容,以行为单位来排序。 参数如下: -b 忽略每行前面开始出的空格字符。 -c 检查文件是否已经按照顺序排序。 -d 排序时,处理英文字母、数字及空格字符外,忽略其他的字符。 -f 排序时,将小写字母视为大写字母。 -i 排序时,除了040至176之间的ASCII字符外,忽略其他的字符。 -m 将几个排序好的文件进行合并。 -M 将前面3个字母依照月份的缩写进行排序。 -n 依照数值的大小排序。 -o<输出文件> 将排序后的结果存入指定的文件。 -r 以相反的顺序来排序。 -k 指定以哪一列来排序。-u 去重。 -t<分隔字符> 指定排序时所用的栏位分隔字符。 +<起始栏位>-<结束栏位> 以指定的栏位来排序,范围由起始栏位到结束栏位的前一栏位。 --help 显示帮助。 --version 显示版本信息。 1.sort直接用就可以对文件进行排序 准备测试文件 [root@www ~]$ cat sorttest.txt hello java php world betty php [root@www ~]$ sort sorttest.txt betty hello java php php world 2.sort -u的选项是去重,在输出行中去除重复行 [root@www ~]$ sort -u

OC模型数组排序

被刻印的时光 ゝ 提交于 2020-03-24 11:44:06
3 月,跳不动了?>>> // 排序key, 某个对象的属性名称,升降序, YES-升序, NO-降序 NSSortDescriptor *sort = [NSSortDescriptor sortDescriptorWithKey:@"type" ascending:NO]; // 排序结果 NSArray * Arr = [list sortedArrayUsingDescriptors:[NSArray arrayWithObject:sort]]; 来源: oschina 链接: https://my.oschina.net/wayzhu/blog/3210027

c++ sort

浪子不回头ぞ 提交于 2020-03-23 07:05:11
用法 1、sort函数可以三个参数也可以两个参数,必须的头文件#include < algorithm>和using namespace std; 2、它使用的排序方法是类似于快排的方法,时间复杂度为n*log2(n) 3、Sort函数有三个参数:(第三个参数可不写) (1)第一个是要排序的数组的起始地址。 (2)第二个是结束的地址(最后一位要排序的地址) (3)第三个参数是排序的方法,可以是从大到小也可是从小到大,还可以不写第三个参数,此时默认的排序方法是从小到大排序 2个参数排序 sort(v.begin(), v.end()); 1 #include <iostream> 2 #include <algorithm> 3 using namespace std; 4 int main() 5 { 6 int a[10] = { 2, 4, 1, 23, 5, 76, 0, 43, 24, 65 }, i; 7 for (i = 0; i<10; i++) 8 cout << a[i] << endl; 9 sort(a, a + 10); 10 for (i = 0; i<20; i++) 11 cout << a[i] << endl; 12 system("pause"); 13 return 0; 14 } 自定义fun排序 i>j 降序; i<j 升序; 1

线性排序:计数排序 Counting Sort 和 基数排序 Radix Sort

て烟熏妆下的殇ゞ 提交于 2020-03-22 00:04:12
3 月,跳不动了?>>> 基于比较的排序最好的时间复杂度为O(N*lgN),证明如下: 每种基于比较的排序都能够使用决策树描述其排序过程,每个节点最多有2个子节点。 该决策树的树叶的最大值即为所有可能的排序结果之和,即N的阶乘N!。 决策树的高度h即为比较的次数,因为二叉树节点数最多为2^h,所以有N! <= 2^h, 根据斯特林公式可知: h >= lgN! >= lg(N/e)^N = N*lg(N/e) = N*lgN - N*lge 因此算法复杂度最好为: O(N*lgN - N*lge) = O(N*lgN) 如果要追求效率更高的排序算法,比如线性排序,就要使用其他的非基于比较的排序算法。 本文用C实现了两种线性排序算法,分别为计数排序Counting Sort 和 基数排序 Radix Sort。这两种算法的实现要求排序元素为整数。 计数排序包括两步:计数和分配。首先对每个元素出现的次数进行计数,然后设置前缀数组得知每个元素在完成排序的数组中的位置,最后依照前缀数组进行元素分配。 可以证明,计数排序的时间复杂度为O(k+n),其中k为元素最大值,n为元素个数。 计数排序简单实现如下: /* Counting Sort include two steps: * Countint and Distribution. */ void countingSort(int arr[

数组重排序方法

£可爱£侵袭症+ 提交于 2020-03-21 12:58:24
今天在复习的过程中,发现自己对数组的重排序方法sort()一直存在一个误区,重新捋顺,在此记录。。。 数组中存在两个可以直接用来重排序的方法:reverse()和sort(),reverse()方法就是反转数组项的顺序。在默认情况下,sort()方法按升序排列数组项, 在这个过程中sort方法会调用每个数组项的toString()转型方法,然后比较得到的字符串, 然后确定排序。之前一直没有注意到这一点,一直以为调用sort()方法过后会直接对一个数组进行正确排序,其实并不是这样,而是对得到的字符串进行比较,自己对它的理解一直都是错误的,今天终于清晰了。。。   sort()方法可以接受一个比较函数作为参数,以便我们制定哪个值位于哪个值的前面。下面是一个简单的比较函数。   function compare(a,b){     if(a<b){       return -1;     }else if(a>b){     return 1;     }else {         return 0;     }   } 将其传递给sort方法即可。 来源: https://www.cnblogs.com/jjworld/p/5205915.html

Python常见的几种算法

人盡茶涼 提交于 2020-03-21 10:48:59
冒泡排序 冒泡排序 (英语:Bubble Sort)是一种简单的排序算法。它重复地遍历要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。遍历数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。 冒泡排序算法的运作如下: 比较相邻的元素。如果第一个比第二个大(升序),就交换他们两个。 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。 针对所有的元素重复以上的步骤,除了最后一个。 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。 冒泡排序的分析 交换过程图示(第一次): 那么我们需要进行n-1次冒泡过程,每次对应的比较次数如下图所示: def bubble_sort(alist): for j in range(len(alist)-1,0,-1): # j表示每次遍历需要比较的次数,是逐渐减小的 for i in range(j): if alist[i] > alist[i+1]: alist[i], alist[i+1] = alist[i+1], alist[i] li = [54,26,93,17,77,31,44,55,20] bubble_sort(li) print(li) 时间复杂度

RE合同记账会计凭证

自作多情 提交于 2020-03-21 08:15:06
*&---------------------------------------------------------------------* *& Title : 不动产转租合同自动出成本 * *& Module : RE * *& Author : linxin * *& Create Date : 11/11/2008 * *& Program Type : Report * *& SAP Release : 4.6c * *& Description : 不动产转租合同自动出成本 * *& * *&---------------------------------------------------------------------* *----------------------------------------------------------------------* *& 修改记录 : * *& 日期 修改人 修改内容 * *& 2014/08/04 chenqy 取租赁合同时,排除类型为ZU80的 * *&---------------------------------------------------------------------* REPORT zre_cost01 NO STANDARD PAGE HEADING LINE-SIZE 200

Linux Shell编程第5章——文件的排序、合并和分割

孤人 提交于 2020-03-21 07:42:48
目录 sort命令 sort命令的基本用法 uniq命令 join命令 cut命令 paste命令 split命令 tr命令 tar命令 sort命令 sort命令是Linux系统一种排序工具,它将输入文件看作由多条记录组成的数据流,而记录由可变宽度的字段组成,以换行符为定界符。sort命令与awk类似,可将记录分成多个域来处理,默认的域分隔符是空格符,域分隔符也可由用户指定。sort命令的基本格式如下: sort [选项] [输入文件] 常用sort命令选项及其意义如下: 选项 意义 -c 测试文件是否已经被排序 -k 指定排序的域 -m 合并两个已排序的文件 -n 根据数字大小进行排序 -o [输出文件] 将输出写到指定的文件,相当于将输出重定向到指定文件 -r 将排序结果逆向显示 -t 改变域分隔符 -u 去除结果中的重复行 sort命令的基本用法 1. -t选项 sort命令是分域对文件进行排序的,默认的域分隔符是空格符,-t选项可用于设置分隔符。下面看一个例子,新建一个CARGO.db的文件,用于记录笔记本品牌、产地、价格、年代、型号等信息,各域间用冒号分隔。 $ cat CARGO.db ThinkPad:USA:14000:2009:X301 ThinkPad:HongKong:10000:2008:T400 ThinkPad:USA:8000:2007:X60 HP