python算法

萤火虫算法-python实现

笑着哭i 提交于 2019-11-29 15:24:27
FAIndividual.py 1 import numpy as np 2 import ObjFunction 3 4 5 class FAIndividual: 6 7 ''' 8 individual of firefly algorithm 9 ''' 10 11 def __init__(self, vardim, bound): 12 ''' 13 vardim: dimension of variables 14 bound: boundaries of variables 15 ''' 16 self.vardim = vardim 17 self.bound = bound 18 self.fitness = 0. 19 self.trials = 0 20 21 def generate(self): 22 ''' 23 generate a random chromsome for firefly algorithm 24 ''' 25 len = self.vardim 26 rnd = np.random.random(size=len) 27 self.chrom = np.zeros(len) 28 for i in xrange(0, len): 29 self.chrom[i] = self.bound[0, i] + \ 30 (self

用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:21:01
Python实现八大排序算法,具体内容如下 1、插入排序 描述 插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据,算法适用于少量数据的排序,时间复杂度为O(n^2)。是稳定的排序方法。插入算法把要排序的数组分成两部分:第一部分包含了这个数组的所有元素,但将最后一个元素除外(让数组多一个空间才有插入的位置),而第二部分就只包含这一个元素(即待插入元素)。在第一部分排序完成后,再将这个最后元素插入到已排好序的第一部分中。 代码实现 def insert_sort(lists): # 插入排序 count = len(lists) for i in range(1, count): key = lists[i] j = i - 1 while j >= 0: if lists[j] > key: lists[j + 1] = lists[j] lists[j] = key j -= 1 return lists 2、希尔排序 描述 希尔排序(Shell Sort)是插入排序的一种。也称缩小增量排序,是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。该方法因DL.Shell于1959年提出而得名。 希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多

八大排序算法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

python基础===八大排序算法的 Python 实现

梦想与她 提交于 2019-11-29 15:20:14
本文用Python实现了插入排序、希尔排序、冒泡排序、快速排序、直接选择排序、堆排序、归并排序、基数排序。 1、插入排序 描述 插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据,算法适用于少量数据的排序,时间复杂度为O(n^2)。是稳定的排序方法。插入算法把要排序的数组分成两部分:第一部分包含了这个数组的所有元素,但将最后一个元素除外(让数组多一个空间才有插入的位置),而第二部分就只包含这一个元素(即待插入元素)。在第一部分排序完成后,再将这个最后元素插入到已排好序的第一部分中。 代码实现 def insert_sort(lists): # 插入排序 count = len(lists) for i in range(1, count): key = lists[i] j = i - 1 while j >= 0: if lists[j] > key: lists[j + 1] = lists[j] lists[j] = key j -= 1 return lists 2、希尔排序 描述 希尔排序(Shell Sort)是插入排序的一种。也称缩小增量排序,是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。该方法因DL.Shell于1959年提出而得名。 希尔排序是把记录按下标的一定增量分组

八大排序算法的 Python 实现

孤街浪徒 提交于 2019-11-29 15:19:56
转载: 八大排序算法的 Python 实现 本文用Python实现了插入排序、希尔排序、冒泡排序、快速排序、直接选择排序、堆排序、归并排序、基数排序。 1、插入排序 描述 插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据,算法适用于少量数据的排序,时间复杂度为O(n^2)。是稳定的排序方法。插入算法把要排序的数组分成两部分:第一部分包含了这个数组的所有元素,但将最后一个元素除外(让数组多一个空间才有插入的位置),而第二部分就只包含这一个元素(即待插入元素)。在第一部分排序完成后,再将这个最后元素插入到已排好序的第一部分中。 代码实现 def insert_sort(lists): # 插入排序 count = len(lists) for i in range(1, count): key = lists[i] j = i - 1 while j >= 0: if lists[j] > key: lists[j + 1] = lists[j] lists[j] = key j -= 1 return lists 2、希尔排序 描述 希尔排序(Shell Sort)是插入排序的一种。也称缩小增量排序,是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。该方法因DL.Shell于1959年提出而得名。

python实现八大排序算法

不想你离开。 提交于 2019-11-29 15:19:27
插入排序 核心思想 插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据,算法适用于少量数据的排序,时间复杂度为 O(n^2)。是稳定的排序方法。插入算法把要排序的数组分成两部分:第一部分包含了这个数组的所有元素,但将最后一个元素除外(让数组多一个空间才有插 入的位置),而第二部分就只包含这一个元素(即待插入元素)。在第一部分排序完成后,再将这个最后元素插入到已排好序的第一部分中。 代码实现 def insert_sort(lists): # 插入排序 count = len(lists) for i in range(1, count): key = lists[i] j = i - 1 while j >= 0: if lists[j] > key: lists[j + 1] = lists[j] lists[j] = key j -= 1 return lists 1 2 3 4 5 6 7 8 9 10 11 12 希尔排序 核心思想 希尔排序(Shell Sort)是插入排序的一种。也称缩小增量排序,是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。该方法因DL.Shell于 1959年提出而得名。 希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少

八大排序算法的 Python 实现

一笑奈何 提交于 2019-11-29 15:19:09
插入排序: 插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据,算法适用于少量数据的排序,时间复杂度为O(n^2)。是稳定的排序方法。插入算法把要排序的数组分成两部分:第一部分包含了这个数组的所有元素,但将最后一个元素除外(让数组多一个空间才有插入的位置),而第二部分就只包含这一个元素(即待插入元素)。在第一部分排序完成后,再将这个最后元素插入到已排好序的第一部分中。 1 def insert_sort(lists): 2 count = len(lists) 3 for i in range(1,count): 4 key = lists[i] 5 j = i-1 6 while j >= 0: 7 if lists[j] > key: 8 lists[j+1] = lists[j] 9 lists[j] = key 10 j -= 1 11 return lists 希尔排序: 希尔排序Shell Sort是插入排序的一种。也称缩小增量排序,是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。该方法因DL.Shell于1959年提出而得名。 希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止。 def

各种排序算法-用Python实现

与世无争的帅哥 提交于 2019-11-29 15:18:47
冒泡排序 # 冒泡排序 def bubble_sort(l): length = len(l) # 外层循环 length遍,内层循环少一遍 while length: for j in range(length - 1): # 找出最大值,然后交换位置到最后 if l[j] > l[length - 1]: l[j], l[length - 1] = l[length - 1], l[j] length -= 1 if __name__ == "__main__": l = [5, 1, 9, 3, 2, 7] bubble_sort(l) print l 插入排序 """ 插入排序和冒泡排序的区别在于: 插入排序的前提是:左边是有序的数列 而冒泡排序:相邻的值进行交换,一共进行n次交换 """ def insert_sort(l): # 循环 除第一个数字组成的有序数组 以外的数字 for i in range(1, len(l)): # 每一个数字,依次和有序数组进行比较 print l[:i] for j in range(len(l[:i])): if l[i] < l[j]: l[i], l[j] = l[j], l[i] if __name__ == "__main__": l = [5, 1, 9, 3, 2, 7] print l insert_sort(l)

用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