list排序

泛型排序 (VB.NET)

ε祈祈猫儿з 提交于 2019-11-29 18:41:04
泛型排序 (VB.NET) Module _4_Generic_Demo Sub Main() Dim list As New List(Of Person) list.AddRange(New Person() {New Person("Ken", 36), New Person("Allen", 56), New Person("Mary", 28)}) Print2(list) list.Sort() Print2(list) list.Sort(New NameComparer) Print2(list) End Sub Sub Print(ByVal list As List(Of Integer)) For Each i As Integer In list Console.WriteLine(i) Next Console.WriteLine("--------------------------------------------------") End Sub Sub Print2(ByVal list As List(Of Person)) For Each i As Person In list Console.WriteLine(i.Name & " : " & i.Age) Next Console.WriteLine("-----------------

浅入浅出 Java 排序算法

蹲街弑〆低调 提交于 2019-11-29 17:37:06
Java String 源码的排序算法 一、前言 Q:什么是选择问题? 选择问题,是假设一组 N 个数,要确定其中第 K 个最大值者。比如 A 与 B 对象需要哪个更大?又比如:要考虑从一些数组中找出最大项? 解决选择问题,需要对象有个能力,即比较任意两个对象,并确定哪个大,哪个小或者相等。找出最大项问题的解决方法,只要依次用对象的比较(Comparable)能力,循环对象列表,一次就能解决。 那么 JDK 源码如何实现比较(Comparable)能力的呢? 二、java.lang.Comparable 接口 Comparable 接口,从 JDK 1.2 版本就有了,历史算悠久。Comparable 接口强制了实现类对象列表的排序。其排序称为自然顺序,其 compareTo 方法,称为自然比较法。 该接口只有一个方法 public int compareTo(T o); ,可以看出 入参 T o :实现该接口类,传入对应的要被比较的对象 返回值 int:正数、负数和 0 ,代表大于、小于和等于 对象的集合列表(Collection List)或者数组(arrays) ,也有对应的工具类可以方便的使用: java.util.Collections#sort(List) 列表排序 java.util.Arrays#sort(Object[]) 数组排序 那 String

PHP数组基础知识总结以及排序

不打扰是莪最后的温柔 提交于 2019-11-29 17:18:34
最近刚刚实习,经常用到php的数组,所以总结一下,以后不用随时去乱搜。 一:基础知识 PHP支持数字索引数组和关联数组,关联数组允许使用更有意义的数据(如字符串)作为索引。以及允许间隔性地使用数组和字符串作为数组的索引。 1、数组定义: $arr = [1,2,3,4];//数字索引数组 php5.4以上提供的新方式 $arr = ['a'=>1,'b'=>2];//关联索引数组 $arr = array(1,2,3,4); $arr = array('a'=>1,'b'=>2); $arr = range(1,n);//自动创建1~n的数字数组 PHP的数组不需要预先初始化或创建,在第一次使用时就会自动的创建如: $arr['a'] = 1; $arr['b'] = 2; $arr['c'] = 3; 2、数组的遍历 for循环 只能用于有序的数字索引数组 for($i = 0;$i<count($arr);$i++){ echo $arr[$i]; } foreach for($arr as $key=>$value){ echo $key."--".$value; } each while($ele = each($arr)){ echo ele['key']."--".ele['value']; } list(常用) reset($arr);//重置指针 while

用Python实现常见排序算法

纵然是瞬间 提交于 2019-11-29 15:21:57
在1960年代,计算机制造商们曾经估计,如果将所有的用户计入,他们制造的计算机有25%的时间用于排序。实际上,有很多计算机花了超过一半的计算时间在排序上。通过这样的评估结果,我们可以得出结论,可能(i)确实有很多非常重要的和排序相关的应用,或者(ii)很多人在进行一些不必要的排序计算,再或者(iii)低效的排序算法被广泛采用造成了计算的浪费。 来源《The Art of Computer Programming》,作者Donald Knuth 在Python实践中,我们往往遇到排序问题,比如在对搜索结果打分的排序(没有排序就没有Google等搜索引擎的存在),当然,这样的例子数不胜数。《数据结构》也会花大量篇幅讲解排序。之前一段时间,由于需要,我复习了一下排序算法,并用Python实现了各种排序算法,放在这里作为参考。 最简单的排序有三种:插入排序,选择排序和冒泡排序。这三种排序比较简单,它们的平均时间复杂度均为O(n^2),在这里对原理就不加赘述了。贴出来源代码。 插入排序: def insertion_sort(sort_list): iter_len = len(sort_list) if iter_len < 2: return sort_list for i in range(1, iter_len): key = sort_list[i] j = i - 1 while

八大排序算法python实现

我只是一个虾纸丫 提交于 2019-11-29 15:20:48
一、概述 排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。 我们这里说说八大排序就是内部排序。 当n较大,则应采用时间复杂度为 O(nlog2n)的排序方法:快速排序、堆排序或归并排序序。 快速排序:是目前基于比较的内部排序中被认为是最好的方法,当待排序的关键字是随机分布时,快速排序的平均时间最短; unsortedList=[55, 91, 63, 71, 72, 7, 74, 16, 4, 31, 100, 51, 94, 35, 49, 46, 43, 59, 18, 17] 二、 算法 实现 1.插入排序——直接插入排序(Straight Insertion Sort) 基本思想: 将一个记录插入到已排序好的有序表中,从而得到一个新,记录数增1的有序表。即:先将序列的第1个记录看成是一个有序的子序列,然后从第2个记录逐个进行插入,直至整个序列有序为止。 要点:设立哨兵,作为临时存储和判断数组边界之用。 直接插入排序示例: 从后往前插入 如果碰见一个和插入元素相等的,那么插入元素把想插入的元素放在相等元素的后面。所以,相等元素的前后顺序没有改变,从原无序序列出去的顺序就是排好序后的顺序, 所以插入排序是稳定的。 (无哨兵)直接插入排序——算法的实现: def

Java实现八大排序算法

巧了我就是萌 提交于 2019-11-29 15:20:30
本文对常见的排序算法进行了总结。 常见排序算法如下: 直接插入排序 希尔排序 简单选择排序 堆排序 冒泡排序 快速排序 归并排序 基数排序 它们都属于内部排序,也就是只考虑数据量较小仅需要使用内存的排序算法,他们之间关系如下: \[ \begin{cases}内部排序 \begin{cases}插入排序\begin{cases}直接插入排序\\希尔排序\end{cases}\\选择排序\begin{cases}简单选择排序\\堆排序\end{cases}\\交换排序\begin{cases}冒泡排序\\快速排序 \end{cases}\\归并排序\\ 基数排序\end{cases}\\外部排序 \end{cases} \] \[ \left\{\begin{matrix} 内部排序\\ 外部排序 \end{matrix}\right. \] 稳定与非稳定 : 如果一个排序算法能够保留数组中重复元素的相对位置则可以被称为是 稳定 的。反之,则是 非稳定 的。 直接插入排序 基本思想 通常人们整理桥牌的方法是一张一张的来,将每一张牌插入到其他已经有序的牌中的适当位置。在计算机的实现中,为了要给插入的元素腾出空间,我们需要将其余所有元素在插入之前都向右移动一位。 算法描述 一般来说,插入排序都采用in-place在数组上实现。具体算法描述如下: 从第一个元素开始,该元素可以认为已经被排序

用python实现各种排序算法

假如想象 提交于 2019-11-29 15:18:27
最简单的排序有三种:插入排序,选择排序和冒泡排序。它们的平均时间复杂度均为O(n^2),在这里对原理就不加赘述了。 贴出源代码: 插入排序: 1 def insertion_sort(sort_list): 2 iter_len = len(sort_list) 3 if iter_len < 2: 4 return sort_list 5 for i in range(1, iter_len): 6 key = sort_list[i] 7 j = i - 1 8 while j>=0 and sort_list[j]>key: 9 sort_list[j+1] = sort_list[j] 10 j =j - 1 11 sort_list[j+1] = key 12 return sort_list 冒泡排序: 1 def bubble_sort(sort_list): 2 iter_len = len(sort_list) 3 if iter_len < 2: 4 return sort_list 5 for i in range(iter_len-1): 6 for j in range(iter_len-i-1): 7 if sort_list[j] > sort_list[j+1]: 8 sort_list[j], sort_list[j+1] = sort_list

各种排序算法的Python实现。

ε祈祈猫儿з 提交于 2019-11-29 15:17:26
大学的算法导论课确实是混过去的,到了毕业的时候结果连个冒泡排序都不能裸写出来,只记得一些算法的基本理论,如分治法、递归、动态规划、回溯、图论、时间空间理论这些。大概知道这些排序算法的实现原理,真在纸上写出来脑子又是一团浆糊。最近在网上看到九章算法的网络课程费用是1299,团购价是799,真是狠不下心去买,也后悔大学里没好好学点算法,浪费了那些学费。 今天花了一天的时间用Python实现了7种排序算法,刚开始的时候觉得非常乱,完全不知道怎么写。不过写着写着思路就变得清晰了,对于排序算法的理解也越发清晰了,好像脑子里有一排数字在比来比去、移来移去,真的是非常有意思。真得感叹一声, 抽象能力真的是软件工程师的必备能力啊 ! 排序算法的本质其实是数字的各种比较方式和移动方式。回到我们大一C语言求一个数组中的最大数和最小数的那门上机课上。其实现原理很简单,就是把第一个数字作为初始数字跟后面的数字依次比较,若后面的数字比它大就跳过,若比它小就拿后面的数字替换掉它,直到遍历这个数组结束,最后得出的这个数就是最小数。 def the_min_of_lists(lists): min = lists[0] for i in range(1,len(lists)): if min > lists[i]: min,lists[i] = lists[i],min return min 冒泡排序

十大经典排序算法

本小妞迷上赌 提交于 2019-11-29 15:16:41
1、算法概述 1.1 算法分类   非线性时间比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此称为非线性时间比较类排序。   线性时间非比较类排序:不通过比较来决定元素间的相对次序,它可以突破基于比较排序的时间下界,以线性时间运行,因此称为线性时间非比较类排序。 1.2 算法复杂度 1.3 相关概念   稳定:如果a原本在b前面,而a = b,排序之后a仍然在b的前面   不稳定:如果a原本在b的前面,而a = b,排序之后a可能会出现在b的后面   时间复杂度:对排序数据的总的操作次数。反映当n变化时,操作次数呈现什么规律。   空间复杂度:是指算法在计算机内执行时所需存储空间的度量,它也是数据规模n的函数。 2、冒泡排序(Bubble Sort)   冒泡排序是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。 2.1 算法描述   比较相邻的元素。如果第一个比第二个大,就交换它们两个。   对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对,这样在最后的元素应该会是最大的数。   针对所有的元素重复以上的步骤,除了最后一个。   重复步骤1~3,直到排序完成。 2.2 动图演示    2.3 代码实现

经典排序算法

大城市里の小女人 提交于 2019-11-29 15:15:19
经典排序算法 算法复杂度 相关概念 稳定 :如果a原本在b前面,而a=b,排序之后a仍然在b的前面。 不稳定 :如果a原本在b的前面,而a=b,排序之后 a 可能会出现在 b 的后面。 时间复杂度 :对排序数据的总的操作次数。反映当n变化时,操作次数呈现什么规律。 空间复杂度: 是指算法在计算机内执行时所需存储空间的度量,它也是数据规模n的函数。 1、冒泡排序(Bubble Sort) 冒泡排序是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。 1.1 算法描述 比较相邻的元素。如果第一个比第二个大,就交换它们两个; 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对,这样在最后的元素应该会是最大的数; 针对所有的元素重复以上的步骤,除了最后一个; 重复步骤1~3,直到排序完成。 1.2 动图演示 1.3 代码实现 1 function bubbleSort(arr) { 2 3 var len = arr.length; 4 5 for (var i = 0; i < len - 1; i++) { 6 7 for (var j = 0; j < len - 1 - i; j++