2023年7月26日发(作者:)
python排序算法⼤全(附源代码)python算法源码之排序(附源码)1. 算法认识1.算法是指解决问题的准确⽽完整的描述,是⼀系列解决问题的清晰指令,算法代表着⽤系统的⽅法描述解决问题的策略机制。都说“程序=算法+数据结构”,虽然是有很多⼈反驳,但是也能说明算法在程序中的重要性。2,算法五⼤特征:(1)有穷性算法的有穷性是指算法必须在执⾏有限个步骤之后终⽌;(2)确切性算法每⼀步骤必须有确切的定义;(3)输⼊项算法必须有0个或者多个输⼊,以刻画运算对象的初始情况,所谓0个输⼊是指算法本⾝定义了初始条件;(4)输出项算法必须有⼀个或者多个输出,以反映对输出的加⼯后的结果,没有输出的算法毫⽆意义;(5)可⾏性算法中执⾏的每⼀个步骤都可以被分解为基本的可执⾏操作步骤,即每⼀个计算步骤都可以在有限时间内完成;3,算法评价(1)时间复杂度算法的时间复杂度是指执⾏算法所需的计算⼯作量;常见的时间复杂度:O(1), O(n), O(n^2)(2)空间复杂度算法的空间复杂度是指⼀个算法在运⾏过程中临时占⽤存储空间⼤⼩的量度;充分利⽤python代码的优势,尽可能将代码写到简洁,⽅便,易懂;2. 冒泡排序1,总结(助记)从第⼀个数开始,与后⾯数⽐较,⼤的放后⾯,⼩的放前⾯,⼤的再与后⾯的数⽐较,依次类推,不断交换,最后将选出第⼀个最⼤的数,放在最后;2,原理基本原理是⽐较相邻两个数的⼤⼩,将两个数中⽐较⼤的那个数交换到靠后的位置,不断地交换下去就可以将最⼤的数放到队列的尾部,然后重新开始,直到将数列排成有序数列;举例:冒泡排序代码:import randomdef randomList(n): iList = [] for i in range(n): (nge(1000)) # append()函数⽤于产⽣随机数存⼊iList列表中 return iListiList1=randomList(20)def bubbleSort(iList): """冒泡排序""" if len(iList1) <=1: return iList1 for i in range(1,len(iList1)): for j in range(0,len(iList1)-i): if iList[j] >= iList[j+1]: iList1[j], iList1[j+1] = iList1[j+1], iList1[j] print("第%d轮排序结果为:" %i, end=" ") print(iList1) return iListif __name__ == "__main__": print(iList1) print("冒泡排序结果:",bubbleSort(iList1))运⾏代码结果展⽰:3. 选择排序1, 总结(助记)某⼀个数为基数,遍历数列中其他的数字,找出最⼩的那个数,然后交换这两个数的位置,找到最⼩或者最⼤的那个数;2,原理冒泡排序是相邻两个数⽐较,⽽选择排序则是某个数和数列中其他所有的数进⾏⽐较,挑出最⼩的最⼩(⼤)的那个数就可以了;3,举例演⽰:选择排序算法程序将这个数放到合适的位置,然后在抛开这个数的⼦数列中找找最⼤值,知道⾃数列为空为⽌。"""import randomdef randomList(n): iList = [] for i in range(n): (nge(1000)) return iListiList1=randomList(20)def selectionSort(iList): if len(iList1) <= 1: return iList1 for i in range(0,len(iList1)-1): if iList1[i] !=min(iList1[i:]): # 使⽤min函数找到剩余数列中最⼩的那个数 minIndex = (min(iList1[i:])) iList1[i], iList1[minIndex] = iList1[minIndex], iList1[i] print("第%d轮排序结果:" %(i+1), end=" ") print(iList1) return iList1if __name__ == "__main__": print(iList1) print("选择排序以后的结果:", selectionSort(iList1))程序运⾏结果展⽰:4. 插⼊排序1. 总结:插⼊排序就是跟打扑克取牌⼗分相似,在打扑克时候,每取⼀张牌,我们都会与⼿上的牌进⾏⽐较,将新牌插⼊到⽐⾃⼰的⼩的牌后⾯,取完牌后⼿上所有的牌就是⼀个有序的序列;2. 原理插⼊排序⾸先就是将数列分成两部分,数列第⼀部分为left部分,其他数为right部分,然后将right部分中的数逐⼀取出来,插⼊到left部分中合适的位置,当right部分为空时,left部分就成为⼀个有序的数列;3. 举例演⽰插⼊排序算法代码:"""插⼊排序:就是取第⼀个为left,其他的数为right,然后将right中数取出来,放到合适的位置"""import randomdef randomList(n): iList = [] for i in range(n): (nge(1000)) return iListiList1=randomList(20)def insertionSort(iList): if len(iList1) <= 1: return iList1 for right in range(1, len(iList1)): target = iList1[right] for left in range(0, right): if target <= iList1[left]: iList1[left+1:right+1] = iList1[left:right] # 使⽤python的切⽚赋值 iList1[left] = target break print("第%d轮排序结果:" %(right), end=" ") print(iList1) return iList1if __name__ == "__main__": print(iList1) print("插⼊排序后的结果:",insertionSort(iList1))程序代码运⾏结果显⽰:5. 归并排序1. 总结:将排序数列分成若⼲组,每个数分为⼀组,将若⼲个组两两合并,保证合并后的数列是有序的,重复合并,排序完成;2. 原理归并排序就是⾸先要做到的是将数列分成左右两部分,最好是等分,然后将左右两个⼦数排列完毕后再合并到⼀起的就成为⼀个有序的数列;3. 举例演⽰:归并排序算法实现程序import randomimport sysimport ursionlimit(10000)def randomList(n): iList = [] for i in range(n): (nge(1000)) return iListiList=randomList(20)def mergeSort(iList): if len(iList) <= 1: return iList middle = len(iList)//2 left,right = iList[0:middle],iList[middle:] return mergeList(mergeSort(left), mergeSort(right))def mergeList(left,right): mList = [] while left and right: if left[0] >= right[0]: ((0)) else: ((0)) while left: ((0)) while right: ((0)) return mListif __name__ =="__main__": print(iList) print("排序后的结果:",mergeSort(iList)) print(("mergeSort(iList)","from __main__ import mergeSort,iList",number=100))程序运⾏结果展⽰:6.快速排序1. 总结快速排序算法是⼀种递归排序,⽤最简单的⽅法来解决复杂的问题,唯⼀不太好的地⽅就是稍微有点浪费时间;2. 原理从列表中的意⼀个数为基准,将列表中分为左右的两个⼦列表:左边⼦列表的数要⽐基数⼩,右边⼦列表的数要⽐基数⼤;然后继续把左边⼦列表和右边⼦列表按同样的⽅法继续分解⽐较,⼀直到分⽆可分为⽌,最后按照 左⼦列表数(⽐基数⼩)+基准数+ 右边⼦列表数(⽐基数⼤)⽅式连接起来,3. 举例演⽰:快速排序算法实现代码import randomimport timeitimport ursionlimit(10000)def randomList(n): iList = [] for i in range(n): (nge(1000)) # append()函数⽤于产⽣随机数存⼊iList列表中 return iListiList=randomList(20)def quickSort(iList): if len(iList) <= 1: return iList left = [] right = [] for i in iList[1:]: if i <= iList[0]: (i) else: (i) return quickSort(left) + [iList[0]] + quickSort(right)if __name__ == "__main__": print("排序前随机序列",iList) print("快速排列后:",quickSort(iList)) print("运⾏程序所花的时间",("quickSort(iList)","from __main__ import quickSort,iList",number=100))程序代码运⾏结果:7.计数排序1. 总结⽐较特殊的算法,不是基于⽐较的算法,将两个数进⾏⽐较,将⼤的数放在 前⾯,⼩的数放在后⾯的算法叫做基于⽐较的算法;2. 原理⾸先建⽴⼀个与原数列相等的空数列,采⽤⼀种巧妙地⽅法,就是选择⼀个数作为基数,然后统计有多少个数⽐基数⼩,如果整个数列中有n个数⽐基数⼩,那么基数就放在新数列的第n+1的位置,rlist[n];3. 举例演⽰下⾯展⽰⼀些
计数排序算法。计数排序算法实现代码import randomimport timeitdef randomList(n): iList = [] for i in range(n): (nge(1000)) return iListiList=randomList(20)def countingSort(iList): if len(iList) <=1: return iList iLen=len(iList) rList = [None]*iLen for i in range(iLen): small = 0 # ⽐基数⼩的 same = 0 # 与基数相等的 for j in range(iLen): if iList[j] < iList[i]: small += 1 elif iList[j] == iList[i]: same += 1 for k in range(small, small+same): rList[k] = iList[i] return rListif __name__ == "__main__": print("排序前:",iList) print("计数排序后的结果:",countingSort(iList)) print("运⾏程序所花费的时间:",("countingSort(iList)","from __main__ import countingSort,iList", number=100))程序代码运⾏结果展⽰本⼈⽔平有限,代码可能有很多需要改进,欢迎⼤家评论讨论问题!
发布者:admin,转转请注明出处:http://www.yc00.com/news/1690306644a329749.html
评论列表(0条)