sort

集合相关的常用工具类

半城伤御伤魂 提交于 2020-03-11 14:47:21
1. 简介 Java中的集合类既可以当做放其他数据的容器,又可以当做常见的数据结构使用。Java中提供了很多好用的工具类来操作这些集合类。本篇博客就来介绍下常用的集合工具类。集合常用的工具类大体可以分为3类: JDK本身提供的工具类; Guava提供的工具类; Apache common-Collection提供的工具类 2. JDK提供的工具类 主要由下面三个: Arrays Collections Objects Arrays 是操作数组对象的工具类, Collections 是操作集合对象的工具类。 Objects 是操作引用数据类型对象的工具类。 Arrays的常用方法: 普通 排序 : Arrays.sort(int[] a) Arrays.sort(int[] a, int fromIndex, int toIndex) 其他非boolean基础数据类型的数组对象以及实现Comparable接口的类的数组对象均有此方法。 并行排序 :JDK1.8新增。 Arrays.parallelSort(int[] a) Arrays.parallelSort(int[] a, int fromIndex, int toIndex) 其他非boolean基础数据类型的数组对象以及实现Comparable接口的类的数组对象均有此方法。 并行计算 :JDK1.8新增,支持函数式编程

《STL源码剖析》Sort排序分析

孤者浪人 提交于 2020-03-11 12:08:15
整体而言: sort算法在数据量大时采用Quick Sort(快速排序),一旦分段后的数据量小于某个门槛,为避免Quick Sort的递归调用带来过大的额外负担,就改用Insertion Sort(插入排序),如果递归层次过深,还会改用Heap Sort(堆排序),先分别简单介绍Quick Sort Insertion Sort插入排序 Insertion sort以双层循环的形式进行,外循环便利整个序列,每次迭代决定出一个自区间,内循环遍历自区间,将自区间内的没一个“逆转对”倒转过来。所谓“逆转对”是指任何两个迭代器i,j,i template<class RandomAccessIterator> void __insertion_sort(RandomAccessIterator first,RandomAccessIterator last){ if(first==last) return; for(RandomAccessIterator i=first+1;i!=last;++i)//外循环 __linear_insert(first,i,value_type(first)); //以上[first,i)形成一个子区间 } template <class RandomAccessIterator,class T> inline void__linear_insert

快速排序及STL中的sort算法

浪尽此生 提交于 2020-03-11 10:39:42
   快速排序基本思想是,对待排序序列进行划分(Partition),一次划分,选择一个元素作为枢轴,然后将所有比枢轴小的元素放到枢轴的左边,将比枢轴大的元素放到枢轴的右边。然后对该枢轴划分的左右子序列分别再进行划分,如此递归。Partition是一个非常重要的概念,因为它只需要O(n)的时间复杂度就可以将待排序序列划分为两块具有大小关系的区间,可以根据这一特性求解待排序序列中最大的k个数、第k大的数等类似问题。   快速排序算法复杂度O(nlogn).   就平均时间而言,快速排序是目前被认为是最好的一种内部排序方法,其平均时间是O(nlogn),最坏情况是O(n^2),最坏的情况就是如下倒序完后再正序排的情况。   C++代码如下: #include "stdafx.h" #define MAXSIZE 20 typedef struct{ int r[MAXSIZE+1]; int len; }SqList; int Partition(SqList &L, int low, int high) { L.r[0] = L.r[low]; // 以第一个元素作为枢轴 int pivotkey = L.r[low];// 记录枢轴关键字 while (low < high) { while(low<high && L.r[high]>=pivotkey)       --high

sort (STL)

穿精又带淫゛_ 提交于 2020-03-11 09:33:30
#include <algorithm> //仅C++ 使用方法: sort(首指针,尾指针,比较函数) 实例: 输入:   数据个数   数据 输出:   有序数列 #include <iostream> #include <cstdio> #include <algorithm> using namespace std; const int Maxm = 1000 + 2; int n[Maxm]; bool cmp(int a, int b) {return a > b;} int main() { int t; scanf("%d", &t); for(int i = 0; i < t; i++) scanf("%d", &n[i]); sort(n + 1, n + t, cmp); for(int i = 0; i < t; i++) printf("%d ", n[i]); return 0; } 倒序版本(比较函数自写)  //不是很好,请见谅 #include <iostream> #include <cstdio> #include <algorithm> using namespace std; const int Maxm = 1000 + 2; int n[Maxm]; int main() { int t; scanf("%d", &t); for

STL sort

人走茶凉 提交于 2020-03-11 09:33:14
1: template<class _RanIt> inline 2: void sort(_RanIt _First, _RanIt _Last) 3: { // order [_First, _Last), using operator< 4: _DEBUG_RANGE(_First, _Last); 5: _Sort(_CHECKED_BASE(_First), _CHECKED_BASE(_Last), _Last - _First); 6: } 1: template<class _RanIt, 2: class _Diff, 3: class _Pr> inline 4: void _Sort(_RanIt _First, _RanIt _Last, _Diff _Ideal, _Pr _Pred) 5: { 6: // order [_First, _Last), using _Pred 7: _Diff _Count; 8: for (; _ISORT_MAX < (_Count = _Last - _First) && 0 < _Ideal; ) 9: { 10: // divide and conquer by quicksort 11: 12: // First, we get the middle position, divide the set to

stl sort分析

北城余情 提交于 2020-03-11 09:25:34
最近写代码,无意中发现了一个坑,关于自定义比较函数的stl sort函数的坑,于是记录下来。 先贴代码: 1 #include <iostream> 2 #include <vector> 3 #include <algorithm> 4 5 struct finder 6 { 7 bool operator()(int first, int second){return first <= second;} 8 } my_finder; 9 10 int main(int argc, char** argv) 11 { 12 int value = atoi(argv[1]); 13 int num = atoi(argv[2]); 14 std::vector<int> vecTest; 15 for(int i=0; i!=num; ++i) 16 vecTest.push_back(value); 17 18 std::sort(vecTest.begin(), vecTest.end(), my_finder); 19 for(int i=0; i!=vecTest.size(); ++i) 20 std::cout<<vecTest[i]<<'\t'; 21 std::cout<<std::endl; 22 23 return 0; 24 } 这段代码看上去好好的

STL::sort函数实现

穿精又带淫゛_ 提交于 2020-03-11 09:24:11
声明:本文参考链接: STL::sort实现 。 排序是面试中经常被问及的算法基础知识点,虽然实际应用中不会直接使用,但是理解这些简单的算法知识对于更复杂更实用的算法有一定的帮助,毕竟面试总不能问的太过深入,那么这些知识点就显得很重要了。我们在程序中经常利用sort给序列排序,那么你知道它是什么实现的吗? 函数声明 #include <algorithm> template <class RandomAccessIterator> void sort (RandomAccessIterator first, RandomAccessIterator last); template <class RandomAccessIterator, class Compare> void sort (RandomAccessIterator first, RandomAccessIterator last, Compare comp); 来自 sort - C++ Reference 。STL提供了两种调用方式,一种是使用默认的 < 操作符比较,一种可以自定义比较函数。可是为什么它通常比我们自己写的排序要快那么多呢? 实现原理 STL中的sort不是普通的 快排 ,除了对普通的快速排序进行优化,它还结合了 插入排序 和 堆排序 。根据不同的数量级别以及不同情况,能自动选用合适的排序方法

一些关于排序算法的总结

送分小仙女□ 提交于 2020-03-11 02:42:03
排序算法 平均时间复杂度 冒泡排序 O(n^2) 选择排序 O(n^2) 插入排序 O(n^2) 希尔排序 O(n^1.5) 快速排序 O(N*logN) 归并排序 O(N*logN) 堆排序 O(N*logN) 基数排序 O(d(n+r)) ①冒泡排序(BubbleSort) 基本思想: 两个数比较大小,较大的数下沉,较小的数冒起来。 过程: 比较相邻的两个数据,如果第二个数小,就交换位置。 从后向前两两比较,一直到比较最前两个数据。最终最小数被交换到起始的位置,这样第一个最小数的位置就排好了。 继续重复上述过程,依次将第2.3…n-1个最小数排好位置。 平均时间复杂度: O(n^2) 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

日志简单关键字统计

扶醉桌前 提交于 2020-03-10 11:44:06
一 grep  筛选单个关键字 : grep -E objStr filename|wc -l  grep -E ‘objStr1|objStr2’ filename|wc -l 二 vim  :%s/string/&/gn 三 cat  cat test.log | awk {print’$n’} | sort -nr | uniq -c | sort -k1 -nr  其中 $n 为需要按出现次数排序的那一列,sort -nr 先排序,uniq -c 去重并计算出现次数,sort -k1 -nr 按出现次数排序 来源: CSDN 作者: みか 链接: https://blog.csdn.net/weixin_33470795/article/details/104766679

HDU 5884 Sort (二分+k叉哈夫曼树)

北城余情 提交于 2020-03-09 20:04:58
题意: n 个有序序列的归并排序.每次可以选择不超过 k 个序列进行合并,合并代价为这些序列的长度和.总的合并代价不能超过 T , 问 k 最小是多少。 析:首先二分一下这个 k 。然后在给定 k 的情况下,这个代价其实就是 k 叉的哈夫曼树问题。然后用两个队列维护一下就好。 代码如下: #pragma comment(linker, "/STACK:1024000000,1024000000") #include <cstdio> #include <string> #include <cstdlib> #include <cmath> #include <iostream> #include <cstring> #include <set> #include <queue> #include <algorithm> #include <vector> #include <map> #include <cctype> #include <cmath> #include <stack> #define freopenr freopen("in.txt", "r", stdin) #define freopenw freopen("out.txt", "w", stdout) using namespace std; typedef long long LL; typedef