排序

排序算法

▼魔方 西西 提交于 2021-02-14 15:36:07
#include<iostream> using namespace std; //选择排序 void SelectSort(int list[],int n) {int temp,t,i,j,big; for(i=0;i<n-1;i++) {big=i; for(j=i+1;j<n;j++) { if(list[big]<list[j]) big=j; } temp=list[i]; list[i]=list[big]; list[big]=temp; } for(t=0;t<n;t++) {cout<<list[t];} } //冒泡排序 void bubble(int list[],int n){ int i,temp; for(int p=1;p<n;p++) { for(i=0;i<n-p;i++) if(list[i]<list[i+1]) {temp=list[i]; list[i]=list[i+1]; list[i+1]=temp; } } for(i=0;i<n;i++) {cout<<list[i];}} //插入排序 void Insert(int list[],int n) { for(int i=1;i<n;i++) { int key = list[i]; int j=i-1; while(j>=0&&key>list[j]) {list[j+1]

Java8使用Stream对Map排序

心不动则不痛 提交于 2021-02-12 02:46:02
HashMap<String, Long> map = new HashMap<>(); map.put("a", 10L); map.put("b", 20L); map.put("c", 15L); map.put("d", 23L); System.out.println("----Before Sort-----"); map.forEach((k, v) -> { System.out.println(k + " = " + v); }); Map<String, Long> finalMap = new LinkedHashMap<>(); map.entrySet().stream() .sorted(Map.Entry.<String, Long> comparingByValue().reversed()) .forEachOrdered(e -> finalMap.put(e.getKey(), e.getValue())); System.out.println("----After Sort-----"); finalMap.forEach((k, v) -> { System.out.println(k + " = " + v); }); 来源: oschina 链接: https://my.oschina.net/u/575679/blog

php二维数组指定字段排序

十年热恋 提交于 2021-02-05 06:05:21
工作中遇到个问题,数据来自于excel,读取出来是二维数组,需要按照指定字段排序,类似于sql的order by功能,折腾了一会儿,代码如下: class demo { public function test() { $arr = array( array( 'power' => 380, 'day' => 1, 'where' => 1, ), array( 'power' => 380, 'day' => 2, 'where' => 1, ), array( 'power' => 400, 'day' => 1, 'where' => 1, ), array( 'power' => 380, 'day' => 3, 'where' => 1, ), array( 'power' => 400, 'day' => 2, 'where' => 1, ), array( 'power' => 380, 'day' => 8, 'where' => 1, ), array( 'power' => 380, 'day' => 8, 'where' => 2, ), array( 'power' => 500, 'day' => 1, 'where' => 1, ), array( 'power' => 380, 'day' => 11, 'where' => 1, ), array(

对链表进行排序

本秂侑毒 提交于 2021-01-09 12:30:39
#include<stdio.h> #include<stdlib.h> #include<malloc.h> struct node { int data; struct node *pnext; }; struct node *creat_list();//创建链表函数 void traverse_list(struct node *phead);//遍历链表函数 bool is_empty(struct node *phead);//判断链表是否为空函数 int lenght_list(struct node *phead);//计算链表长度的函数 void sort_list(struct node *phead);//对链表进行排序 int insert_list(struct node *phead,int weizhi,int shu );//插入节点函数 int delete_list(struct node *phead ,int weihzi);//删除节点函数 int main() { struct node *phead; phead=creat_list(); traverse_list(phead); if(is_empty(phead)) printf("链表不为空!\n"); else printf("链表为空!\n"); int len

堆排序的python实现

只谈情不闲聊 提交于 2020-12-19 08:23:08
#--coding: utf8 -- # 堆排序的思想 -- 以大根堆为例: # 1) 构建堆 # 2) 把堆根取下来放到有序区去 -- 堆跟是当前堆上最大的数字 # 3) 此时堆没有根了,重新调整堆,然后重复1) - 3)直到堆成为一个空堆 # # 堆排序是选择排序的一种: 也是每次从未排序的区域选择一个值放入已排序的区域 # 它对直接选择排序的改进是: 对于以前已经比较过的结果可以保留下来:不用再重复比较:这也是堆的特性 def heap_sort(arr): build_heap(arr) arrlen = len(arr) for i in reversed(range(1, arrlen)): # 把堆跟(最大的值)放到最后面去 swap(arr, 0, i) # 重新调整堆 heapify(arr, 0, i - 1) def swap(arr, index1, index2): tmp = arr[index1] arr[index1] = arr[index2] arr[index2] = tmp def build_heap(arr): """ 以arr[0]到arr[(arrlen / 2)]为根的这些子树是需要调整的子树 其他的都是叶子节点 """ arrlen = len(arr) for i in reversed(range(0, (arrlen - 1

排序|归并排序

Deadly 提交于 2020-11-28 04:11:59
归并( Merge )排序法是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,每个子序列是有序的。然后再把有序子序列合并为整体有序序列。 归并 :将两个已经排好序的集合合并到一个集合众,并且 保证新的集合也是有序的 。 核心点 :只有一个元素的集合是已经排好序的集合。归并排序是建立在归并操作上的一种有效的排序算法。归并排序算法是采用分治法( Divide And Conquer )的一个非常典型的应用。 归并排序流程: 1.对任意的元素数目为m集合,可以分成m个只有一个元素的子集合。 2.对其m个元素只有一个的集合实现归并操作,可以得到[m/2]个新的子集合([ 如果m不是偶数 ],细节问题,多出的单独保留,即存有[m/2 + 1]个集合),关键的是这些新的集合也是有序的。 3.重复2的操作,直至最后只有一个集合。 由于各子集合始终保持有序,最终的集合也是有序的,也就得到了排序后的集合,算法目的实现。 在这里,我们不是用递归来实现。按照思想,归并排序的实现代码如下: //归并排序 public static void MergeSort(int[] array) { //以空间换取时间 int[] temp = new int[array.Length]; //size子数组的长度 //默认为1个元素的子集合(即铁定已排好序的集合) int size

排序-归并排序

倖福魔咒の 提交于 2020-11-28 03:40:21
零、数据结构和算法系列目录 数据结构和算法系列目录(不断更新): http://my.oschina.net/liuzeli/blog/128278 一、归并排序简介 归并排序和插入排序一样,其核心是基于比较的,所以也是比较排序中的一种。归并排序运用的分治算法的思想。在介绍归并排序的同时也简单的介绍一下分治算法,这种算法的核心讲解会在后续的博客中介绍。回国头来继续说归并排序。归并排序有着很好的应用场景,它适合给大规模的数据排序,当数据量非常大时,内存排序困难可以对归并排序稍加改动让其支持分批从硬盘读取数据并进行排序,最后把结果进行合并。归并排序(二路归并)的主要思路就是假设两个数组A和数组B分别已经是排序好的,再对这两个数组A和B进行合并成为一个新的排序好的数组。这一步是归并排序的核心步骤,如果对于这个待排序数组来说,开始先对数组两个两个元素进行排序,在对其合并变成4个元素为一组,在变成8个元素为一组,从而到最后完成所有数据的排序。 二、分治算法的简介 分治算法的主要核心是分而治之的思想,即把原文题进行分解,分解成若干的子问题,在对子问题进行求解,在对所有子问题的答案进行合并从而得到原问题的结果。可以表示成下面叙述的过程。 1. 分解:将原问题分解成若干个规模较小且相对独立的的与原问题形式相同的子问题。 2. 求解:若子问题规模较小并且容易解决时将对其进行求解,否则递归的解决子问题

可视化排序实践之冒泡排序

五迷三道 提交于 2020-10-28 09:11:56
如果 排序过程 和 程序执行 能结合起来,那么这个过程会更加直观。 本文给出一个冒泡排序的可视化排序实现, 效果如下图所示: 界面组成 界面很简单就包括两个部分: 界面左侧是可视化排序部分 , 右侧是冒泡排序的代码 。 如何实现 代码 和 排序 的视觉同步? 关键点 如何在页面上表示出排序程序的运行过程。 如何将排序程序的运行过程和可视化排序结合起来,保持状态一致。 解决方法 在这个例子中,我才用了 javax.swing.JList 模拟程序的运行。 javax.swing.JList 有一个 setSelectedIndex 的方法,能高亮显示指定的行。 通过改变selectedIndex的值,能够达到模拟冒泡排序程序执行的效果。在这个过程中,记录下两个循环的索引状态值,根据这些状态值去调整可视化排序。 页面展示 初始化页面 程序随机产生10个数字,然后展示在左侧的排序面板中,每个数都用绿色的矩形展示。 private List<NumberRectangle> initialNumberRectangles() { List<NumberRectangle> list = new ArrayList<NumberRectangle>(); /** * 随机产生10个数组 */ Random random = new Random(); for (int i = 1; i <=

lucene 自定义评分 影响排序

寵の児 提交于 2020-04-15 23:27:10
【推荐阅读】微服务还能火多久?>>> 前记 这段时间需要修改一个别人写的一个搜索有关的项目,恰好底层使用的是lucene搜索框架。 为什么要去修改呢,当然是搜索结果不太令人满意啦,于是去研读了项目中关于搜索的代码。。。。。。 正文 经过了几天代码的研读,最终总结出来了几条问题: 创建索引的过程,相当简单,感觉仅仅是把lucene当成关键词匹配的工具去了(需要修改索引策略) 搜索的过程也是比较简单,没有结合项目的需求,定制化搜索(搜索策略需要修改) 额,感觉上面两条好像是在说废话,感觉lucene的和核心就是索引和搜索 为了能尽快解决问题,初步修改就定为了: 索引阶段,将信息分成多个域,同时根据域的重要程度,加入权重。还有就是加入搜索结果排序要使用的字段(分域,权重,加入排序字段) 搜索阶段 根据类别搜索不同的域,同时加入自定义评分 下面就简单的说一下自定义评分: 我用的是lucene是: <dependency> <groupId>org.apache.lucene</groupId> <artifactId>lucene-core</artifactId> <version>4.10.2</version> </dependency> 上网查了很多的资料,发现lucene实现自定义评分是通过在构建查询的时候加入的,操作起来很方便。直接上代码吧: public class

dataTables中文排序以及中英文混排乱序问题解决

|▌冷眼眸甩不掉的悲伤 提交于 2020-04-12 13:16:20
dataTables是个强大的JQuery表格插件,但是不支持中文排序,这个比较令人头疼。 这里针对几种常见的数据格式写了一个dataTables的中文排序方法: //添加中文排序 function addChieseAsc() { jQuery.fn.dataTableExt.oSort['chinese-asc'] = function(x, y) { x = (x instanceof Array) ? x[0] : x == '-' ? 'z' : x; //z的ASCII码值最大 y = (y instanceof Array) ? y[0] : y == '-' ? 'z' : y; //javascript自带的中文比较函数,具体用法可自行查阅了解 return x.localeCompare(y); }; jQuery.fn.dataTableExt.oSort['chinese-desc'] = function(x, y) { x = (x instanceof Array) ? x[0] : x == '-' ? 'z' : x; y = (y instanceof Array) ? y[0] : y == '-' ? 'z' : y; return y.localeCompare(x); }; // aTypes是插件存放表格内容类型的数组 //