如何用Python实现八大排序算法1、插入排序描述插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据,算法适用于少量数据的排序,时间复杂度为 O(n^2)。是稳定的排序方法。插入算法把要排序的数组分成两部分:第一部分包含了这个数组的所有元素,但将最后一个元素除外(让数组多一个空间才有插 入的位置),而第二部分就只包含这一个元素(即待插入元素)。在第一部分排序完成后,...
冒泡排序(Bubble Sort,台灣譯為:泡沫排序或氣泡排序)是一種簡單的排序算法。它重複地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。這個算法的名字由來是因為越小的元素會經由交換慢慢「浮」到數列的頂端。冒泡排序演算法的運作如下: 1. 比較相鄰的元素。如果第一個比第二個大,就交換他們兩個。 2. 對每一對相...
快速排序由于排序效率在同为O(N*logN)的几种排序方法中效率较高,因此经常被采用。 该方法的基本思想是: 1.先从数列中取出一个数作为基准数。 2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。 3.再对左右区间重复第二步,直到各区间只有一个数。 现在通过一个实例来说明快排。 比如有一个数组:6 2 4 5 3 第一步:选取一个基准数,不要被这个名词吓到了,你可以把它看作是一个比较大小的数,因...
代码如下: #!/usr/bin/python import sys def left_child(node): return node * 2 + 1 def right_child(node): return node * 2 + 2 def parent(node): if (node % 2): return (i - 1) / 2 else: return (i - 2) / 2 def max_heapify(array, i, heap_size): l = left_child(i) r = right_child(i) largest = i if l < heap_size and array[l] > array[i]: largest = l if r < heap_size and array[r] > array[largest]: largest = ...
代码如下:# -*- coding: utf-8 -*- def insertion_sort(A): """插入排序,作为桶排序的子排序""" n = len(A) if n <= 1: return A B = [] # 结果列表 for a in A: i = len(B) while i > 0 and B[i-1] > a: i = i - 1 B.insert(i, a); return B def bucket_sort(A): """桶排序,伪码如下: BUCKET-SORT(A) 1 n ← length[A] // 桶数 2 for i ← 1 to n ...
代码如下:def insertion_sort(n): if len(n) == 1: return n b = insertion_sort(n[1:]) m = len(b) for i in range(m): if n[0] <= b[i]: return b[:i]+[n[0]]+b[i:] return b + [n[0]]l = [1,3,4,2,6,7,9,7,12,11,789,345,456]print insertion_sort(l)d = input(l=)print insertion_sort(d)a = input(y:)
前段时间为准备百度面试恶补的东西,虽然最后还是被刷了,还是把那几天的“战利品”放点上来,算法一直是自己比较薄弱的地方,以后还要更加努力啊。 下面用Python实现了几个常用的排序,如快速排序,选择排序,以及二路并归排序等等。 代码如下:#encoding=utf-8import randomfrom copy import copy def directInsertSort(seq): """ 直接插入排序 """ size = len(seq) for i in range(1,size): tmp, j = seq[i], i while j > 0 an...
本文实例讲述了python实现bucket排序算法。分享给大家供大家参考。具体实现方法如下:def bucketSort(a, n, buckets, m):for j in range(m):buckets[j] = 0for i in range(n):buckets[a[i]] += 1i = 0for j in range(m):for k in range(buckets[j]):a[i] = ji += 1希望本文所述对大家的Python程序设计有所帮助。
本文实例讲述了python实现希尔排序算法的方法。分享给大家供大家参考。具体如下:def shellSort(items):inc = len(items) / 2while inc:for i in xrange(len(items)):j = itemp = items[i]while j >= inc and items[j-inc] > temp:items[j] = items[j - inc]j -= incitems[j] = tempinc = inc/2 if inc/2 else (0 if inc==1 else 1) a = [35, -8, 11, 1, 68, 0, 3]; shellSort(a) print a # [-8, 0, 1, 3, 11, 35, 68]希望本文所述...
一、快速排序快速排序(Quicksort)是对冒泡排序的一种改进。由C. A. R. Hoare在1962年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。快速排序,递归实现def quick_sort(num_list):"""快速排序"""if num_list == []:return num_listsmallLi...
Python实现插入排序的一般范例为:#coding=cp936 #coding=cp936 #插入排序算法 def InsertionSort(A):for j in range(1,len(A)):key = A[j]i = j-1#向前查找插入位置while i>=0 and A[i]>key:A[i+1] = A[i]i = i-1A[i+1] = key#初始化输入数据 A = [] input = raw_input(please input some numbers:) #输入逗号分隔整数列 如:7,6,5,1,8,34 for item in input.split(,):A.append(int(item))InsertionSort(A)#插入排序 print A...
一、计数排序 计数排序(Counting sort)是一种稳定的排序算法 算法的步骤如下:找出待排序的数组中最大和最小的元素统计数组中每个值为i的元素出现的次数,存入数组C的第i项对所有的计数累加(从C中的第一个元素开始,每一项和前一项相加)反向填充目标数组:将每个元素i放在新数组的第C(i)项,每放一个元素就将C(i)减去1当输入的元素是 n 个 0 到 k 之间的整数时,计数排序的时间复杂度为O(N+K),空间复杂度为O(N+K)。当K不是很大时...
代码如下:# -*- coding: utf-8 -*-# 测试各种排序算法# link:www.bitsCN.com# date:2013/2/2 #选择排序def select_sort(sort_array): for i, elem in enumerate(sort_array): for j, elem in enumerate(sort_array[i:]): if sort_array[i] > sort_array[j + i]: #交换 sort_array[i], sort_array[j + i] = sort_array[j + i], sort_array[i]#冒泡排序def bubble_sort(sort_a...
理论不多说: 代码如下: #!/usr/bin/python import sys def merge(array, q, p, r): left_array = array[q:p+1] right_array = array[p+1:r+1] left_array_num = len(left_array) right_array_num = len(right_array) i, j , k= [0, 0, q] while i < left_array_num and j < right_array_num: if (left_array[i] < right_array[j]): array[k] = left_array[i] i+=1 else: array[k] = right_array[j] j+=1 k+=1 while i < left_arr...
本文实例总结了python选择排序算法。分享给大家供大家参考。具体如下: 代码1:def ssort(V): #V is the list to be sorted j = 0#j is the "current" ordered position, starting with the first one in the list while j != len(V):#this is the replacing that ends when it reaches the end of the list for i in range(j, len(V)):#here it replaces the minor value that it finds with j position if V[i] < V[j]:#but it d...