python排序

import math
class sort:
    def selectSort(self, L):
        size = len(L)
        for i in range(0, size):
            max = L[i]
            index = i
            for j in range(i, size):
                if L[j] > max:
                    max = L[j]
                    index = j
            temp = L[i]
            L[i] = max
            L[index] = temp
        print L
    def insertSort(self,L):
        size = len(L)
        for i in range(1,size):
            fv = L[i]
            j = i
            while(j >= 1):
                if fv < L[j-1]:
                    L[j]=L[j-1]
                else:
                    break
                j = j -1
            L[j] = fv
        print L
    def bubbleSort(self,L):
        size = len(L)
        for i in range(size-1,-1,-1):
            for j in range(0,i-1):
                if L[j] > L[j+1]:
                    tmp = L[j+1]
                    L[j+1] = L[j]
                    L[j] = tmp
        print L

    def merge(self, L1, L2):
        L = []
        index1 = 0
        index2 = 0
        size1 = len(L1)
        size2 = len(L2)
        top = min(size1, size2)
        while(index1 != size1 and index2 != size2):
            if L1[index1] > L2[index2]:
                L.append(L2[index2])
                index2 = index2 + 1
            else:
                L.append(L1[index1])
                index1 = index1 + 1
        if index1 < size1:
            for i in range(index1,size1):
                L.append(L1[i])
        if index2 < size2:
            for i in range(index2,size2):
                L.append(L2[i])
        return L

    def mergeInL(self,L,first,mid,last):
        tempa = []
        tempb = []
        for i in range(first,mid+1):
            tempa.append(L[i])
        for i in range(mid+1,last+1):
            tempb.append(L[i])
        tempc = self.merge(tempa,tempb)
        index = 0
        for i in range(first,last+1):
            L[i] = tempc[index]
            index += 1

    def mergeSort(self,L,first,last):
        if first < last:
            mid = math.trunc((first+last)/2)
            self.mergeSort(L,first,mid)
            self.mergeSort(L,mid+1,last)
            self.mergeInL(L,first,mid,last)

    def quickSort(self,L,left,right):
        i = left
        j = right
        middle = L[left]
        while i <= j:
            while L[i] < middle and i < right:
                i += 1
            while L[j] > middle and j > left:
                j -= 1
            if i <= j:
                temp = L[i]
                L[i] = L[j]
                L[j] = temp
                i += 1
                j += 1
        if left < j:
            self.quickSort(L, left , j)
        if right > i:
            self.quickSort(L, i , right)

    def partition(self,L,left,right):
        tmp = L[right]
        index = -1
        for i in range(left,right):
            if L[i] < tmp:
               index += 1
               tp = L[index]
               L[index] = L[i]
               L[i] = tp
        tp = L[index+1]
        L[index + 1] = L[right]
        L[right] = tp
        return index + 1

    def quickSort1(self,L,left,right):
        if left < right:
            index = self.partition(L,left,right)
            self.quickSort1(L,left, index - 1)
            self.quickSort1(L,index + 1, right)

a = sort()
L = [3, 2, 5,9, 7]
print "the data"
print L

#print "select sort"
#a.selectSort(L)
#print "insert sort"
#a.insertSort(L)
#print "bubble sort"
#a.bubbleSort(L)
#print "merge Sort"
#a.mergeSort(L,0,5)
print "quick sort"
a.quickSort1(L, 0,4)
print L

  

时间: 2024-10-15 06:07:41

python排序的相关文章

python排序算法实现(冒泡、选择、插入)

python排序算法实现(冒泡.选择.插入) python 从小到大排序 1.冒泡排序: O(n2) s=[3,4,2,5,1,9] #count = 0 for i in range(len(s)): for j in range((i+1),len(s)): s[i],s[j]=min(s[i],s[j]),max(s[i],s[j]) #print count print s 2.选择排序: O(n2) s=[3,4,2,5,1,9] #count = 0 for i in range(l

Python 排序算法的实现

冒泡排序: 1 def bubble(l): 2 length = len(l) 3 for i in range(length): 4 for j in range(i+1, length): 5 if l[i] > l[j]: 6 l[i], l[j] = l[j], l[i] 7 print l 选择排序: 1 def select(l): 2 length = len(l) 3 for i in range(length): 4 minn = i 5 for j in range(i+1

python排序之一插入排序

python排序之一插入排序 首先什么是插入排序,个人理解就是拿队列中的一个元素与其之前的元素一一做比较交根据大小换位置的过程好了我们先来看看代码 首先就是一个无序的列表先打印它好让排序后有对比效果,然后我后面注释工作流程,下面我来一一说明下其运行流程,开始先声明一个插入排序的函数名insert_sort,要传入的参数为lis,count来获取列表lis长度len(lis),然后我们要开始写循环对比for i in range(从1到列表长度count)然后把列表下标为一位置的数也就是28(li

用 Python 排序数据的多种方法

用 Python 排序数据的多种方法 目录 [Python HOWTOs系列]排序 Python 列表有内置就地排序的方法 list.sort(),此外还有一个内置的 sorted() 函数将一个可迭代对象(iterable)排序为一个新的有序列表. 本文我们将去探索用 Python 做数据排序的多种方法. 排序基础 简单的升序排序非常容易:只需调用 sorted() 函数,就得到一个有序的新列表: 你也可以使用 list.sort() 方法,此方法为就地排序(并且返回 None 来避免混淆).

Python排序介绍

Python排序介绍 本文简单记录了Python中的内建函数 sort() 和 sorted() 的使用方法,以及它们在 Python2 和 Python3 中的区别. 概述 内建函数 sort() 和 sorted() 都可以对一个List进行排序,它们的区别是,sort 对 List 本身进行排序(sorts the list in place),没有返回,而 sorted 会返回经过排序后的 list.两者的参数一样,所进行的排序都是稳定的. >>> l = [2, 4, 6, 1

python 排序与搜索

python 排序与搜索 学习了一下排序与搜索,做一下总结.如果那里不对,请多指教. 排序算法:是一种能将一串数据依照特定顺序进行排列的一种算法. 稳定性:稳定排序算法会让原本有相等键值的纪录维持相对次序.也就是如果一个排序算法是稳定的,当有两个相等键值的纪录R和S,且在原本的列表中R出现在S之前,在排序过的列表中R也将会是在S之前. 例如   (1,3)(2,3)(1,2)(2,1)进行排序 冒泡排序: 比较相邻的元素.如果第一个比第二个大(升序),就交换他们两个.持续每次对越来越少的元素重复

Python排序算法之直接插入排序

插入排序的主要思想是每次取一个列表元素与列表中已经排序好的列表段进行比较,然后插入从而得到新的排序好的列表段,最终获得排序好的列表. 比如,待排序列表为[49,38,65,97,76,13,27,49],则比较的步骤和得到的新列表如下: (带有背景颜色的列表段是已经排序好的,红色背景标记的是执行插入并且进行过交换的元素) 时间复杂度:O(n^2) 待排序:  [49,38,65,97,76,13,27,49] 第一次比较后:  [38,49,65,97,76,13,27,49]     第二个元

[python] 排序的动态展示

两句闲话 本文所说的排序是指基于交换的排序.因此,按理来说,本文应该叫基于交换的排序的动态展示,但是这样太拗口了. 效果展示 最终效果如下. 实现方法 需要说明的是,在这里是通过pygame来实现图形界面:程序使用python 3.5编写.使用pygame的好处在于,它非常自由(当然也非常麻烦). 我们一共需要编写四个文件:draw.py,sort_show.py,sort.py,main.py. 1.draw.py 在这里,我们先在draw.py中写一个Draw类,以实现pygame生成界面的

python 排序

由于排序在编程应用中占有很大的比重,此次学习主要利用python中的DSU方法(decorate-sort-undecorate).列表的sort方法和内建的sorted函数提供了一个快速.原生的DSU实现. 具体应用实例: 1.对字典进行排序 def sortedDict(xdict): keys = xdict.keys() keys.sort() return map(xdict.get, keys) 通过map(xdict.get, key)比列表推导[xdict[key] for ke

python排序sorted与sort比较

Python list内置sort()方法用来排序,也可以用python内置的全局sorted()方法来对可迭代的序列排序生成新的序列. sorted(iterable,key=None,reverse=False),返回新的列表,对所有可迭代的对象均有效 sort(key=None,reverse=False) 就地改变列表  reverse:True反序:False 正序 Example1: >>>sorted([1,5,3,2,9]) [1,2,3,5,9] >>>