精华内容
下载资源
问答
  • 这篇文章主要介绍了python常用排序算法的实现代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下排序是计算机语言需要实现的基本算法之一,有序的数据结构会...

    这篇文章主要介绍了python常用排序算法的实现代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    排序是计算机语言需要实现的基本算法之一,有序的数据结构会带来效率上的极大提升。

    1.插入排序

    插入排序默认当前被插入的序列是有序的,新元素插入到应该插入的位置,使得新序列仍然有序。

    def insertion_sort(old_list):

    n=len(old_list)

    k=0

    for i in range(1,n):

    temp=old_list[i]

    j=i

    while j>0 and temp

    old_list[j]=old_list[j-1]

    j=j-1

    old_list[j]=temp

    return old_list

    2.冒泡排序

    冒泡排序的原理是对序列进行遍历,遍历过程中如果发现相邻两个元素,左边的元素大于右边,则进行交换,一次遍历之后最大的元素被移动到对尾,然后进行第二次遍历,直到队列有序。

    def bubble_sort(old_list):

    n=len(old_list)

    for i in range(n-1):

    for j in range(n-1-i):

    if old_list[j]>old_list[j+1]:

    old_list[j],old_list[j+1]=old_list[j+1],old_list[j]

    return old_list

    3.快速排序

    快速排序的实现方法是设置两个游标,一个从前往后,一个从后往前,如果左侧游标所指数据大于右侧,两数据进行交换,直到两个游标指向同一数据,则第一趟遍历结束。结束时游标所在数据,左侧都比其小,右侧都比其大。

    接下来对游标前后的两个序列进行递归操作。

    def quick_sort(list,low,high):

    i=low

    j=high

    if i >= j:

    return list

    key=list[i]

    while i < j:

    while i < j and list[j]>=key:

    j = j - 1

    list[i]=list[j]

    while i < j and list[i]<=key:

    i = i + 1

    list[j]=list[i]

    list[i]=key

    quick_sort(list,low,i-1)

    quick_sort(list,j+1,high)

    return list

    4.选择排序

    选择排序的原理是是先找到起始数组中最小的元素,将它交换到i=0;然后寻找剩下元素中最小的元素,将它交换到i=1的位置…… 直到找到第二大的元素,将它交换到n-2的位置。这时,整个数组的排序完成。

    def select_sort(list):

    length=len(list)

    for i in range(length):

    min_index=i

    for j in range(i,length):

    if list[j]

    min_index=j

    list[i],list[min_index]=list[min_index],list[i]

    return list

    5.归并排序

    归并排序是对数组进行拆分再拆分,直到不能再拆分,然后分别对最小粒度的子数组进行合并,然后再合并稍微大一点的数组,直到最终合成一个最大的数组。分两个函数完成,一个负责拆分,一个负责排序合并。

    def merge_sort(list):

    if len(list)<=1:

    return list

    mid=int(len(list)/2)

    left=merge_sort(list[:mid])

    right=merge_sort(list[mid:])

    return merge(left,right)

    def merge(list1,list2):

    list=[]

    i,j=0,0

    while i

    if list1[i]

    list.append(list1[i])

    i=i+1

    elif list1[i]>=list2[j]:

    list.append(list2[j])

    j=j+1

    list.extend(list1[i:])

    list.extend(list2[j:])

    return list

    6.希尔排序

    def shell_sort(nums):

    step = len(nums)/2

    while step > 0:

    for i in range(step, len(nums)):

    while i >= step and nums[i-step] > nums[i]:

    nums[i], nums[i-step] = nums[i-step], nums[i]

    i -= step

    step = step/2

    return nums

    以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

    展开全文
  • 写在前面:参考文章:十大经典排序算法 本文的逻辑顺序基于从第一篇参考博文上借鉴过来的图,并且都是按照升序排序写的程序,程序语言采用python。思路:冒泡排序的基本思想就是让小的数逐渐‘浮上来’。也就是说:...

    写在前面:

    参考文章:十大经典排序算法 本文的逻辑顺序基于从第一篇参考博文上借鉴过来的图,并且都是按照升序排序写的程序,程序语言采用python。

    思路:

    冒泡排序的基本思想就是让小的数逐渐‘浮上来’。也就是说:

    第一次冒泡:将最小的数调换到最前面;

    第二次冒泡:将第二小的数调换到最小的数的后面,也就是数组中的第二位;

    第三次冒泡,将第三小的数调换到数组中的第三位;

    ... ...

    代码如下:

    # 冒泡排序

    def bubble_sort(nums):

    # 每次冒泡,将最大的元素冒到最后面

    # 第一次是前n个元素,最大的元素冒到最后

    # 第二次是前n-1个元素,最大的元素冒到倒数第二个位置

    # ... ...

    n = len(nums)

    for i in range(n-1):

    for j in range(0,n-i-1):

    if nums[j]>nums[j+1]:

    nums[j], nums[j+1] = nums[j+1],nums[j]

    return nums

    时间复杂度: O(n^2),实际上是n-1 + n-2 + n-3 + ...,所以是平方的量级。

    空间复杂度: O(l),没有借助额外空间。

    快速排序

    思路

    快速排序的基本思路就是在一遍快排中,以基准值为基础,将比基准值小的数放到基准值的左边,比基准值大的数放在基准值的右边。然后在递归的快排基准值的左边和右边。至于基准值的取法,理论上来讲是无所谓的。

    先来一个比较简单直接的吧。它的思路就是遍历一遍数组,用两个空的数组来存储比基准值大和比基准值小的数,代码如下:

    def quick_sort1(nums):

    n = len(nums)

    if n ==1 or len(nums)==0:

    return nums

    left = []

    right = []

    for i in range(1,n):

    if nums[i] <= nums[0]:

    left.append(nums[i])

    else:

    right.append(nums[i])

    return quick_sort1(left)+[nums[0]]+quick_sort1(right)

    上面的使用了额外的空间,空间复杂度比较高,下面是基于双指针的想法的代码,比较常见:

    def quick_sort2(nums,left,right):

    l,r = left,right-1

    while l < r:

    if nums[r] < nums[l]:

    nums[r], nums[l] = nums[l], nums[r]

    l += 1

    while l < r:

    if nums[l] > nums[r]:

    nums[r],nums[l] = nums[l], nums[r]

    r -= 1

    break

    else:

    l += 1

    else:

    r -= 1

    if l-left > 1:

    quick_sort2(nums, left, l)

    if right - r > 1:

    quick_sort2(nums, l+1, right)

    return nums

    在上面博客中看到的第三种方法,甚是巧妙,代码如下:

    def quick_sort3(nums, l, r):

    if l < r:

    q = partition(nums, l, r)

    quick_sort(nums, l, q - 1)

    quick_sort(nums, q + 1, r)

    return nums

    def partition(nums, l, r):

    x = nums[r]

    i = l - 1

    for j in range(l, r):

    if nums[j] <= x:

    i += 1

    nums[i], nums[j] = nums[j], nums[i]

    nums[i + 1], nums[r] = nums[r], nums[i+1]

    return i + 1

    简单插入排序

    插入排序,意思是将某一个数字插入到已经排好序的数组当中。

    代码如下:

    def insert_sort(nums):

    n = len(nums)

    for i in range(1,n):

    index = i

    for j in range(i-1,-1,-1):

    if nums[j] > nums[index]:

    nums[index],nums[j] = nums[j],nums[index]

    index -= 1

    else:

    break

    return nums

    希尔排序

    简单选择排序

    简单选择排序,就是每一次选择一个当前最小的元素放在已经排好序的数组的后面。

    def selection_sort(nums):

    n = len(nums)

    for i in range(n):

    index = i

    for j in range(i+1,n):

    if nums[j]

    index = j

    nums[i],nums[index] = nums[index],nums[i]

    return nums

    堆排序

    def head_sort(elems):

    def siftdown(elems,e,begin,end):

    i, j = begin, begin*2+1

    while j < end:

    if j+1 < end and elems[j+1] < elems[j]:

    j += 1

    if e < elems[j]:

    break

    elems[i] = elems[j]

    i, j = j, 2*j+1

    elems[i] = e

    end = len(elems)

    for i in range(end//2, -1, -1):

    siftdown(elems, elems[i], i, end)

    for i in range((end-1), 0, -1):

    e = elems[i]

    elems[i] = elems[0]

    siftdown(elems, e, 0, i)

    nums.reverse()

    return nums

    二路归并排序

    多路归并排序

    计数排序

    桶排序

    基数排序

    展开全文
  • productlist.sort(lambda p1,p2:cmp(p1.getPrice(),p2.getPrice()))数组productlist中存储的是自定义类Product,Product有一个方法是返回商品的价格,于是对productlist按照Product的价格从低到高进行排序,仅需要...

    首先把实现方法写出来,其实很简单,只需要一句代码即可:

    productlist.sort(lambda p1,p2:cmp(p1.getPrice(),p2.getPrice()))

    数组productlist中存储的是自定义类Product,Product有一个方法是返回商品的价格,于是对productlist按照Product的价格从低到高进行排序,仅需要如此简单的一行代码即可实现。

    Python真的是一门简洁而强大的语言,实际上,我也是从写出一行代码之后,才真正感受到这门语言的魅力。

    写到这里,顺便介绍一下lambda表达式的相关知识,现在很多语言都支持lambda表达式,甚至包括.Net。

    lambda函数一般也被叫做匿名函数,先来看一个最简单例子:

    def test(x):

    return x**2

    print test(4)

    如果使用lambda,则语法如下:

    test = lambda x : x**2

    print test(4)

    从上面的例子可以看出,lambda语句构建的其实是一个函数对象,lambda最大的特点就是,可以省去定义函数的过程,让代码更加精简。

    关于lambda的语法

    lambda语句中,冒号前是参数,可以有多个,用逗号隔开;冒号右边是返回值。

    展开全文
  • 今天小编就为大家分享一篇python对数组进行排序,并输出排序后对应的索引值方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • python对数组进行排序,并输出排序后对应的索引值方式废话不多说,直接上代码吧!# -*- coding: cp936 -*-import numpy as np#一维数组排序arr = [1, 3, 5, 2, 4, 6]arr = np.array(arr)print arrprint np.sort(arr)#...

    python对数组进行排序,并输出排序后对应的索引值方式

    废话不多说,直接上代码吧!

    # -*- coding: cp936 -*-

    import numpy as np

    #一维数组排序

    arr = [1, 3, 5, 2, 4, 6]

    arr = np.array(arr)

    print arr

    print np.sort(arr)#或print np.sort(arr,axis=None)

    print (np.argsort(arr)) # 正序输出索引,从小到大

    print (np.argsort(-arr)) # 逆序输出索引,从大到小

    输出结果:

    [1 3 5 2 4 6]

    [1 2 3 4 5 6]

    [0 3 1 4 2 5]

    [5 2 4 1 3 0]

    #二维数组排序

    list1 = [[4,3,2],[2,1,4]]

    array=np.array(list1)

    print array

    array.sort(axis=1) #axis=1按行排序,axis=0按列排序

    print array

    输出结果:

    [[4 3 2]

    [2 1 4]]

    [[2 3 4]

    [1 2 4]]

    补充拓展:python 对数组进行排序并保留索引

    如下所示:

    import numpy as np

    arr = [1, 3, 5, 2, 4, 6]

    arr = np.array(arr)

    print (np.argsort(arr)) # 正序输出

    print (np.argsort(-arr)) # 逆序输出

    以上这篇python对数组进行排序,并输出排序后对应的索引值方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

    时间: 2020-02-27

    这篇文章主要介绍了Python获取二维数组的行列数的2种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 import numpy as np x = np.array([[1,2,5],[2,3,5],[3,4,5],[2,3,6]]) # 输出数组的行和列数 print x.shape # (4, 3) # 只输出行数 print x.shape[0] # 4 # 只输出列数 print x.shape[1] # 3 或者 In [48]

    reshape(shape) : 不改变数组元素,返回一个shape形状的数组,原数组不变.是对每行元素进行处理 resize(shape) : 与.reshape()功能一致,但修改原数组 In [1]: a = np.arange(20) #原数组不变 In [2]: a.reshape([4,5]) Out[2]: array([[ 0, 1, 2, 3, 4], [ 5, 6, 7, 8, 9], [10, 11, 12, 13, 14], [15, 16, 17, 18, 19]])

    不同的数字之间使用 空格" ","$","*"等隔开,支持带小数点的字符串 NumArray=str2num(LineString,comment='#') 将字符串中的所有非Double类型的字符全部替换成空格 以'#'开头直至行尾的内容被清空 返回一维numpy.array数组 import numpy import scipy def str2num(LineString,comment='#'): from io import Strin

    一.问题描述 1.求一个无序数组的中位数, (若数组是偶数,则中位数是指中间两个数字之和除以2,若数组是奇数,则中位数是指最中间位置.要求:不能使用排序,时间复杂度尽量低 2.例如: lists = [3, 2, 1, 4] , 中位数为 = (2+3)/2 = 2.5 lists = [3, 1, 2] , 中位数为 2 3.算法思想: 利用快速排序思想(但是并不是全部使用):任意挑选一个元素,以该元素为key, 划分数组为两个部分,如果左侧数组长度刚好为(n-1)/2, 那么key就为中位数

    在python中,用于数组拼接的主要来自numpy包,当然pandas包也可以完成. 而,numpy中可以使用append和concatenate函数: 1. 建立数组 # pandas有专门的连接方法 import numpy as np # np.size(a, 0) 行数 # np.size(a, 1) 列数 a = np.array([[1, 2],[3, 4],[5, 6]]) b = np.array([[11, 22],[33, 44],[55, 66]]) print(np.si

    我就废话不多说了,直接上代码吧! import datetime def find_close(arr, e): start_time = datetime.datetime.now() size = len(arr) idx = 0 val = abs(e - arr[idx]) for i in range(1, size): val1 = abs(e - arr[i]) if val1 < val: idx = i val = val1 use_time = datetime.dateti

    关于多维数组如何复合排序 如数组: >>> import numpy as np >>> data = np.array([[2,2,5],[2,1,3],[1,2,3],[3,1,4]]) >>>> data array([[2, 2, 5], [2, 1, 3], [1, 2, 3], [3, 1, 4]]) 将数组先按照第一列升序,第二列升序,第三列升序的方式排序: >>> idex=np.lexsort([data[:,

    本文实例讲述了Python实现二维数组按照某行或列排序的方法.分享给大家供大家参考,具体如下: lexsort支持对数组按指定行或列的顺序排序:是间接排序,lexsort不修改原数组,返回索引. (对应lexsort 一维数组的是argsort a.argsort()这么使用就可以:argsort也不修改原数组, 返回索引) 默认按最后一行元素有小到大排序, 返回最后一行元素排序后索引所在位置. 设数组a, 返回的索引ind,ind返回的是一维数组 对于一维数组, a[ind]就是排序后的数组.

    0.目录 1.遇到的问题 2.创建二维数组的办法 •3.1 直接创建法 •3.2 列表生成式法 •3.3 使用模块numpy创建 1.遇到的问题 今天写Python代码的时候遇到了一个大坑,差点就耽误我交作业了... 问题是这样的,我需要创建一个二维数组,如下: m = n = 3 test = [[0] * m] * n print("test =", test) 输出结果如下: test = [[0, 0, 0], [0, 0, 0], [0, 0, 0]] 是不是看起来没有一点问

    本文介绍下,php中使用array_multisort函数进行二维数组排序的例子,有需要的朋友,参考下吧.继上一篇文章:PHP二维数组排序自定义函数,今天,我们再介绍一个php二维数组排序的例子.php对二维数组的排序很简单,主要用到array_multisort函数.例子: 复制代码 代码如下: <?php /** * php二维数组排序 * edit www.jb51.net*/     $data = array();     $data[] = array('volume' => 67

    本文实例讲述了PHP按指定键值对二维数组进行排序的方法.分享给大家供大家参考,具体如下: 问题: 有数组: 复制代码 代码如下: array(0=>array('id'=>1,'price'=>50),1=>array('id'=>2,'price'=>60)); 要求根据数组的price这个字段进行排序. 实现代码如下: <?php $array[] = array('id'=>1,'price'=>50); $array[] = array('id

    本文实例讲述了php根据某字段对多维数组进行排序的方法.分享给大家供大家参考.具体分析如下: 根据某字段对多维数组进行排序,在看到array_multisort方法的作用时突然想到,可以用来做这个方法 这段代码可实现根据field字段对数组进行排序 function sortArrByField(&$array, $field, $desc = false){ $fieldArr = array(); foreach ($array as $k => $v) { $fieldArr[$k]

    PHP中array_multisort可以用来一次对多个数组进行排序,或者根据某一维或多维对多维数组进行排序. 关联(string)键名保持不变,但数字键名会被重新索引. 输入数组被当成一个表的列并以行来排序--这类似于 SQL 的 ORDER BY 子句的功能.第一个数组是要排序的主要数组.数组中的行(值)比较为相同的话就按照下一个输入数组中相应值的大小来排序,依此类推.--这句话是理解此函数用法的关键. 第一个参数必须是一个数组.接下来的每个参数可以是数组或者是下面列出的排序标志. 排序顺序

    本文实例总结了php一维二维数组键排序方法.分享给大家供大家参考.具体方法如下: 在php中数组排序一直是一个老生常谈的问题,下面我们来集中讲一下关于在php中一维数组与二维数组排序的实现程序,相信对大家有一定的参考借鉴价值. 功能:对数组进行重新排序. 说明:冒泡排序 (一维数组)(二维数组某个健排序) 两两比较待排序数据元素的大小,发现两个数据元素的次序相反时即进行交换,直到没有反序的数据元素为止 设想被排序的数组R[1..N] 垂直竖立,将每个数据元素看作有重量的气泡,从下往上扫描数组,凡

    之前提到去除一维数组中的重复元素用unique()函数,如果要去除二维数组中的重复行该怎么操作呢? import numpy as np arr = np.array([[1, 2],[3, 4],[5, 6],[7, 8],[3, 4],[1, 2]]) print(np.array(list(set([tuple(t) for t in arr])))) 输出: [[1 2] [3 4] [5 6] [7 8]] 如果是二维列表,列表中每个元素还是列表 list2=list(set([tup

    展开全文
  • 一、字典排序1、利用key排序d = {'d1':2, 'd2':4, 'd4':1,'d3':3,}for k in sorted(d):print(k,d[k])d1 2d2 4d3 3d4 12、利用value排序:__getitem__d = {'d1':2, 'd2':4, 'd4':1,'d3':3,}for k in sorted(d,key=d._...
  • python对数组插入排序

    2018-12-30 12:10:00
    #!/usr/bin/env python # -*- coding:utf-8 -*- lst = [5,1,4,3,2] for i in range(len(lst) - 1): for j in range(i + 1, len(lst)): if lst[i] > lst[j]: lst[i], lst[...
  • 排序用的sorted函数,去重自己实现的,当然去重也可以用set import sys num = int(sys.stdin.readline().strip("\n")) list1=[] for i in range(num): m=int(sys.stdin.readline().strip("\n")) list1.append(m) ...
  • how can one sort an integer array (not a list) in-place in Python 2.6? Is there a suitable function in one of the standard libraries?In other words, I'm looking for a function that would do something....
  • python 对数组进行排序并保留索引

    千次阅读 2018-08-01 16:22:00
    import numpy as np arr = [1, 3, 5, 2, 4, 6] arr = np.array(arr) print (np.argsort(arr)) # 正序输出 print (np.argsort(-arr)) # 逆序输出
  • 530.0, 0.33], [1604.0, 482.0, 1943.0, 407.0, 1954.0, 454.0, 1614.0, 530.0, 0.13], [908.0, 1418.0, 1064.0, 1421.0, 1064.0, 1458.0, 907.0, 1456.0, 0.21]] 我想根据每行中的第一个数字对这个数组进行排序。...
  • # -*- coding: cp936 -*-import numpy as np#一维数组排序arr = [1, 3, 5, 2, 4, 6]arr = np.array(arr)print arrprint np.sort(arr)#或print np.sort(arr,axis=None)print (np.argsort(arr)) # 正序输出索引,从小...
  • python对数组进行排序,并输出排序后对应的索引值

    万次阅读 多人点赞 2019-06-16 17:31:24
    # -*- coding: cp936 -*...#一维数组排序 arr = [1, 3, 5, 2, 4, 6] arr = np.array(arr) print arr print np.sort(arr)#或print np.sort(arr,axis=None) print (np.argsort(arr)) # 正序输出索引 print (np...
  • python对数组或字典变量排序

    千次阅读 2018-04-02 20:48:43
    数据处理中需要对数组按行或按列进行...对数组按最后一行排序,且保持列的相对位置不变&gt;&gt;&gt; import numpy as np &gt;&gt;&gt; data=np.array([[ 2, 7, 1, 2],[35, 9, 1, 2],...
  • python(五) 对数组排序

    千次阅读 2016-07-27 21:04:15
    数组的申请是: arr = []  然后向数组中读入数据是: arr.append() 代码: n = int(input()) arr = [] for i in range(0,n): arr.append(int(input())) arr.sort() for i in range(0,n): print(arr[i])
  • python对数组去重进行

    千次阅读 2018-03-28 11:04:27
    /usr/bin/python# -*- coding: utf-8 -*-import sys array = []a = 1array.append(int(a))a =2array.append(int(a))###集合b = set(array)print(b)###列表c = list(b)print(c)###排序d = sorted(c)##打印for i in ...
  • python - 按列在NumPy中对数组进行排序如何在第n列中对NumPy中的数组进行排序?例如,a = array([[9, 2, 3],[4, 5, 6],[7, 0, 5]])我想按第二列对行进行排序,以便我回来:array([[7, 0, 5],[9, 2, 3],[4, 5, 6]])9...
  • PHP arsort() 函数用来对数组元素进行降序排序(也就是从高到低排序),并保持索引关系。arsort() 和 asort() 的功能相反,asort() 会对数组元素进行升序排序。arsort() 语法如下:bool arsort ( array &$arr [, ...
  • 我正试图解决黑客银行的问题New Year Chaos:进一步的解释可以在页面上找到。.../bin/pythonimport sysT = int(raw_input().strip())for a0 in xrange(T):n = int(raw_input().strip())q = map(in...
  • go 使用sort对数组排序

    千次阅读 2019-04-30 23:28:21
    抓住4月的尾巴更新一篇博客关于golang对slice的排序,golang对数组排序没有像python那么方便,python直接使用listObj.sort()就可以完成对数组元素的排序,golang里面需要使用sort包,并且实现几个接口Len, Swap, Less ...
  • 可以说可以使用np.lexsort或在np.recarray上排序来解决它,但不能以琐碎和Python的方式解决.我有一个numpy数组,例如这个数组:array([[[ 2, 7, 1],[ 35, 9, 1],[ 22, 12, 4]],[[ 12, 2, 3],[ 3, 7, 8],[ 12, 1, 10]]]...
  • 1、数组排序a = [3,1,4,6]a.sort()print(a)执行结果:002.jpg2、多维数组排a = [['5.1.5.40580', 29], ['5.0.8.14000', 11], ['5.0.8.14999', 59], ['5.1.4.37882', 4]]a.sort(key=lambda x:x[1],reverse=True)print...
  • 我正在尝试解决Hackerrank问题New Year Chaos:可以在页面上找到进一步的说明 . 例如,将'swapped'队列表示为 q ,.../bin/pythonimport sysT = int(raw_input().strip())for a0 in xrange(T):n = int(raw_input()....
  • Python对数组集进行按行打乱shuffle的方法如下所示:import numpy as npy1=np.random.randint(2,10,(5,3))print ("排序列表:", y1)np.random.shuffle(y1)print ("随机排序列表:", y1)以上这篇Python对数组集...
  • 1、拆分数组假设数组一共有 n 个元素,我们递归对数组进行折半拆分即n//2,直到每组只有一个元素为止。2、合并数组算法会从最小数组开始有序合并,这样合并出来的数组一直是有序的,所以合并两个有序数组是归并算法...

空空如也

空空如也

1 2 3 4 5 ... 10
收藏数 198
精华内容 79
关键字:

python对数组排序

python 订阅