sort

Linux管道命令——《鸟哥的Linux私房菜》笔记

拜拜、爱过 提交于 2019-12-04 20:43:02
Linux管道命令——《鸟哥的Linux私房菜》笔记 0 前言 看完书之后,总感觉不记录下来的话,很快就会忘了,然后又需要重新到处翻书找资料,所以还是把内容记录下来,方便以后复习。本文大部分是书中的内容,中间加入部分自己的理解以及尝试的例子。 1 简单使用 管道命令使用“|”这个界定符号,用于两个命令中间,作用是把左边命令的标准输出作为右边命令的标准输入。 例如要查询/etc目录下的文件详情,但是内容太多会刷满屏幕,查看起来不方便,就可以利用管道命令通过less命令来查看输出。 ls -al /etc | less 需要注意的点: 管道命令仅能处理标准输出(standard output),会忽略出错时输出的信息(standard error output); 管道命令命令必须要能够接受来自前一个命令的数据成为标准输出继续处理才行。 2 选取命令 2.1 cut 2.1.1 命令介绍 cut命令可以将一段信息的某一段“切”出来,处理的信息是以“ 行 ”为单位。 命令说明如下: cut -d ‘分隔字符’ -f fields # 该命令将每行按“分隔字符”分割,然后选取fields参数的那几部分 cut -c 字符范围 # 该命令用于排列整齐的信息,可以取出每一行在选定字符范围内的串 参数: -d : 后面接分隔字符,与-f一起使用; -f : 依据-d的 分隔字符

Java排序算法总结(转载)

流过昼夜 提交于 2019-12-04 20:14:29
文件源于 : https://www.cnblogs.com/Jason-Xiang/p/8567751.html 排序算法 平均时间复杂度 冒泡排序 O(n2) 选择排序 O(n2) 插入排序 O(n2) 希尔排序 O(n1.5) 快速排序 O(N*logN) 归并排序 O(N*logN) 堆排序 O(N*logN) 基数排序 O(d(n+r)) 一. 冒泡排序(BubbleSort) 基本思想: 两个数比较大小,较大的数下沉,较小的数冒起来。 过程: 比较相邻的两个数据,如果第二个数小,就交换位置。 从后向前两两比较,一直到比较最前两个数据。最终最小数被交换到起始的位置,这样第一个最小数的位置就排好了。 继续重复上述过程,依次将第2.3...n-1个最小数排好位置。 平均时间复杂度: O(n2) java代码实现: public static void BubbleSort(int [] arr){ int temp;//临时变量 for(int i=0; i<arr.length-1; i++){ //表示趟数,一共arr.length-1次。 for(int j=arr.length-1; j>i; j--){ if(arr[j] < arr[j-1]){ temp = arr[j]; arr[j] = arr[j-1]; arr[j-1] = temp; } } } }

快速排序

匆匆过客 提交于 2019-12-04 18:58:40
/*--> */ /*--> */ blog_quickSort Table of Contents 1. 快排分析 与 实现 1.1. 原理 1.1.1. quick sort 最坏情况 1.1.2. quick sort 期望运行时间证明 1.2. quick sort 实现 1 快排分析 与 实现 1.1 原理 quick sort 与 merge sort 类似都是 分治策略. 都具有如下的执行时间递推关系: \(T(n) <= 2T(n/2) + cn\) quick sort在理想情况下如此. T(n) : 表示n规模上的最坏执行时间. 差异在于: quick sort 将cn花在拆分上, 而 merge sort 将cn花在合并上. merge sort 花在 将2个有序数组合并 quick sort 花在 将1个无数数组 拆分为2个无序数组. 1个无数数组中所有元素, 都比 另一个数组中元素小. merge的递推关系是确定的, 而quick sort不是, 在理想情况下与merge sort相同. merge sort需要额外内存, 而 quick sort 不需要. 1.1.1 quick sort 最坏情况 最坏情况: 选出的划分元素, 产生极端情况, 只能1个集合为空, 剩余元素全在另一个集合. 具有递推关系: \(T(n) <= T(n-1) + cn\)

09-排序2 Insert or Merge (25 分)

岁酱吖の 提交于 2019-12-04 18:49:34
According to Wikipedia: Insertion sort iterates, consuming one input element each repetition, and growing a sorted output list. Each iteration, insertion sort removes one element from the input data, finds the location it belongs within the sorted list, and inserts it there. It repeats until no input elements remain. Merge sort works as follows: Divide the unsorted list into N sublists, each containing 1 element (a list of 1 element is considered sorted). Then repeatedly merge two adjacent sublists to produce new sorted sublists until there is only 1 sublist remaining. Now given the initial

算法第四章上机实践报告

眉间皱痕 提交于 2019-12-04 18:35:25
1.实践题目 : 程序存储问题 2.问题描述 :设有n 个程序{1,2,…, n }要存放在长度为L的磁带上。程序i存放在磁带上的长度是 li,1≤i≤n。 程序存储问题要求确定这n 个程序在磁带上的一个存储方案, 使得能够在磁带上存储尽可能多的程序。 对于给定的n个程序存放在磁带上的长度,计算磁带上最多可以存储的程序数。 3.算法描述 :由于题目要求要存储尽可能多的程序,因此首先将n个文件存放在磁带上的长度进行排序,用sort方法,从小到大,每次选择最小的程序进行判断,若是程序所需长度不超过磁带所剩存储空间,则将可存储程序数num+1,这样,每次选最小的,剩余的空间就越大。 反证法:若是没有选择最小的程序,而是选择其他的程序,构成了一个最优解,由于被选择的程序大于最小程序,因此该程序放在磁带上的长度最起码能容纳最小的程序,甚至还可能容纳其他程序,因此选择最小程序所构成的解>=选择其他程序构成的解,即最优解还是包括当前的最小程序。 代码如下: #include <iostream> #include <algorithm> using namespace std; bool compare(int a, int b){ return a < b;//升序 } int main(){ int n, L, l[1000]; cin >> n >> L; for(int i = 1; i

设计模式-六大原则详解

霸气de小男生 提交于 2019-12-04 16:53:59
  设计模式它是一种代码编程长期发展的经验和解决某种问题的通用的思想,并且中所周知的一套代码方法和理念。也是我们编写程序的基石。我日常写代码就好比建造房子一样,首先我们需要搭建好架子。然后根据这个架子慢慢的将整个大厦建起来。同样的,我们在编写程序的时候,也需要遵循一定的原则和框架,这样我们写出来的程序才更见健壮,开发起来也会更加省时间,提高代码的可读性,拓展性,重用性,灵活性等,减少开发成本。设计模式原则其实就是程序员在编程时应当遵守的原则,也是设计模式的基础,即设计模式为什么要这样设计的原因。   设计模式六大原则:   (一)、单一职责原则   (二)、接口隔离原则   (三)、依赖倒置原则   (四)、里氏替换原则   (五)、开闭原则   (六)、迪米特法则   下面我将用说明+代码的方式,尽量地将6大原则说明白。   一、单一职责原则   对于一个类/接口/方式而言之负责一个职责或职能。比如说A类负责两个不同的职责,职责1和职责2,当职责1发生需求变更而修改时,有可能会造成职责2执行错误,这是后需要将A类拆分为A1和A2两个。这样做的有点:1.降低了类的复杂性。2.提高了类的可读性,因为一个类只负责一个职责,看起来比较有目的性。3.提高系统的可维护性,降低了当需求变更时修改程序带来的风险。但是,如果一位的最求单一职责原则,有时候可能会造成类爆炸的问题

PTA 1067 Sort with Swap(0, i) (贪心)

若如初见. 提交于 2019-12-04 16:35:47
题目链接: 1067 Sort with Swap(0, i) (25 分) 题意 给定长度为 \(n\) 的排列,如果每次只能把某个数和第 \(0\) 个数交换,那么要使排列是升序的最少需要交换几次。 思路 贪心 由于是排列,所以排序后第 \(i\) 个位置上的数就是 \(i\) 。所以当 \(a[0] \neq 0\) 时,把 \(a[0]\) 位置上的元素交换到相应位置。如果 \(a[0] = 0\) ,就找到第一个不在正确位置上的数,把它与第 \(0\) 个数交换,那么下一次又是第一种情况了,也就是下一次交换可以换到正确的位置。 代码 #include <bits/stdc++.h> using namespace std; const int maxn = 1e5 + 10; int arr[maxn]; int main() { ios::sync_with_stdio(false); cin.tie(0); int n; cin >> n; for (int i = 0; i < n; ++i) { cin >> arr[i]; } int c = 0, cnt = 0; while (c < n) { if (arr[0] != 0) { swap(arr[0], arr[arr[0]]); cnt++; } else { for (; c < n && arr[c

09-排序1 排序 (25 分)

人盡茶涼 提交于 2019-12-04 15:42:34
给定 N个(长整型范围内的)整数,要求输出从小到大排序后的结果。 本题旨在测试各种不同的排序算法在各种数据情况下的表现。各组测试数据特点如下: 数据1:只有1个元素; 数据2:11个不相同的整数,测试基本正确性; 数据3:103个随机整数; 数据4:104个随机整数; 数据5:105个随机整数; 数据6:105个顺序整数; 数据7:105个逆序整数; 数据8:105个基本有序的整数; 数据9:105个随机正整数,每个数字不超过1000。 输入格式: 输入第一行给出正整数 N( ≤ 1 0 ​ 5 ​​) ,随后一行给出 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> #include<cstdlib> const int maxn = 100010; //插入排序 void insertion_sort(int arr[],int n); //希尔排序 void shell_sort(int arr[],int n); void sedgewick_sort(int arr[], int n); /

排序算法C++实现

流过昼夜 提交于 2019-12-04 12:18:43
#include<iostream> #include<cstring> #include<cmath> #include<algorithm> #include<fstream> #include<sstream> #include<vector> using namespace std; inline void swap(int* arr, int i, int j){ int t = *(arr + i); *(arr + i) = *(arr + j); *(arr + j) = t; } inline int get_bit(int d){ stringstream ss; ss << d; string s; ss >> s; return s.size(); } void merge_sort(int* arr, int left, int right); void shell_sort(int* arr, int len); void bucket_sort(int* arr, int len); void radix_sort(int* arr, int len); void direct_insert_sort(int* arr, int len); void binary_insert_sort(int* arr, int len); void quick

排序与搜索

我的未来我决定 提交于 2019-12-04 11:25:13
排序与搜索 排序算法(英语:Sorting algorithm)是一种能将一串数据依照特定顺序进行排列的一种算法。 排序算法的稳定性 稳定性 :稳定排序算法会让原本有相等键值的纪录维持相对次序。也就是如果一个排序算法是稳定的,当有两个相等键值的纪录R和S,且在原本的列表中R出现在S之前,在排序过的列表中R也将会是在S之前。 当相等的元素是无法分辨的,比如像是整数,稳定性并不是一个问题。然而,假设以下的数对将要以他们的第一个数字来排序。 (4, 1) (3, 1) (3, 7)(5, 6) 在这个状况下,有可能产生两种不同的结果,一个是让相等键值的纪录维持相对的次序,而另外一个则没有: (3, 1) (3, 7) (4, 1) (5, 6) (维持次序) (3, 7) (3, 1) (4, 1) (5, 6) (次序被改变) 不稳定排序算法可能会在相等的键值中改变纪录的相对次序,但是稳定排序算法从来不会如此。不稳定排序算法可以被特别地实现为稳定。作这件事情的一个方式是人工扩充键值的比较,如此在其他方面相同键值的两个对象间之比较,(比如上面的比较中加入第二个标准:第二个键值的大小)就会被决定使用在原先数据次序中的条目,当作一个同分决赛。然而,要记住这种次序通常牵涉到额外的空间负担。 一、冒泡排序 冒泡排序 (英语:Bubble Sort)是一种简单的排序算法。它重复地遍历要排序的数列