Python数据排序,python的快速排序算法
【Python算法工作】采用“比较大小计数,按升序排列索引位置”的方法【升序】#【1 . 3 . 1】【比较大小计数,按升序排列索引位置】【关于对对象数组的元素进行排序,统计较小元素的个数并利用它们的信息。
" " Defconvertto _ _ NumCountList _ in _ List(L):" "生成一个嵌套的输入值列表到列表中的"值,到目前为止(包括它们的)出现次数"对应的值列表中。每个列表元素针对“#l列表”中的每个元素,该列表还包括{值,直到并包括该值的出现次数},首先,执行浮点计数,并将每个值添加到其自己的列表中(code: (float(l(I)))。包括每个值的所有列表加在一起,整个大列表listl _ num _ count=[ [float (I)]。关于len (l)用1listl_num_count[]到目前为止出现的次数:#)第I个元素,统计到目前为止出现的次数(包括它),这个[统计值]是一个值的列表)listl_num_count) I)。append)return listl _ num _ count的列表L _ num _ count(L _ num _ cou _ L)中的每个元素都是两个元素的列表。{数值,包括数值前出现的次数}输出:根据从小到大排列的结果" " #创建冗余数组。数组值用来记录整个列表中小于这个元素的元素个数。#计算完值后,当值按最后一个升序排序时。元素对应的位置索引# smallCountList数组中的每个元素通过0 # small Count list=[0 foriinrange(len(l _ num _ count)]#[for loop start:]索引值foriinrange(len(L _ Num _ Count)-1):forjinrange(i1),len(L _ Num _ Count))330)360 small Count list[j])360]small Count list[I根据索引值,L _ Num _ Count的每个元素或两个元素的列表存储在输出的升序数组中。SortAscending=[[0,0]formula(len(l _ num _ count)(forkin range)len(l _ num _ count)):SortAscending[small count list]=l _ num _ count[k][1]# {数值,前一个(含它)出现次数的[出现次数}返回出现次数_稳定{值,含此值前的出现次数}输出:根据结果创建一个冗余数组" " #从小到大排列。数组值用来记录整个列表中小于这个元素的元素个数。#计算完值后,当值按最后一个升序排序时。
元素对应的位置索引# smallCountList数组中的每一个元素按照升序通过smallll输入的第I个元素的0 # small count list=[0 for iinrange(len(l _ num _ count)]#[for loop start:]index value for iinrange(len(l _ num _ count(-1):forjinrange)i1, len)l _ num _ count)][][0]=L _ Num _ Count[j][0]):small Count list[j]=1 else:#稳定版:注意这里只有1种情况:第I个元素[大于]第j个元素small Count list[I]=1 #[]small Count list[I]第I个输入元素的计算索引值升序#根据索引值,L _ Num _ Count(或者两个元素的列表)的每个元素都存储在输出的升序数组中。 sortAscending=[[0,0]for I In range(len(l _ num _ count))]for k In range(len(l _ num _ count)):升序排序[small count list[k]][0]=l _ num _ count[k][0]# {数值,直到它(包含在[数值]中)升序排序[small count list[k]][1]=l _ num _ count[k][1]# {数值, 包含它的出现次数}返回的[出现次数]sortacendigif _ _ name _ _= _ _ main _ _ :stra=input(请输入一系列要排序的数字(用空格分隔):)#假设您输入1 3 9 8 6 3 1 2 1 4 1 8 9 10 A=stra . split()# A是一个列表list # input被转换为值列表lista _ only num=[float(A[I])for I in range(len(A))]print(您输入的{}值是format(len(listA_onlyNum)),List a _ only Num))listA _ Num _ Count=convertto _ _ Num Count List _ in _ List(listA _ only Num)Print()您输入的序列的每个元素,它出现的次数已被标记:)print(listA_Num_Count) print(使用[1.3.1]中的[ComparisonCountingSort]算法排序:)Sorted Ascend=comparison counting Sort(listA _ Num _ Count)Print(升序排序结果:{})format(sortedAscend)) print(显然:【ComparisonCountingSort】算法是【不稳定的】!)print(只要把if判断语句中的[小于]改成[小于或等于],新的[comparisonCountingsort _ steady]算法就稳定了!)print(使用[comparisonCountingsort _ Steady]算法排序的结果:)sortedAscend _ Steady=comparisonCountingsort _ Steady(lista _ num _ count)print(sortedAscend _ Steady)print(主程序完成。)测试结果:测试日志:
请输入一系列要排序的数字(用空格分隔):1 3 9 8 6 3 1 2 4 1 8 9 10
您输入的13个值是:[1.0,3.0,9.0,8.0,6.0,3.0,1.0,2.0,4.0,1.0,8.0,9.0,10.0]
[提示]:您输入的序列中的每个元素都标记了其出现的时间:
[[1.0, 1], [3.0, 1], [9.0, 1], [8.0, 1], [6.0, 1], [3.0, 2], [1.0, 2], [2.0, 1], [4.0, 1], [1.0, 3], [8.0, 2], [9.0, 2], [10.0, 1]]
使用标题[1.3.1]中的算法[ComparisonCountingSort]进行排序:
按升序排序结果:[[1.0,3],[1.0,2],[1.0,1],[2.0,1],[3.0,2],[3.0,1],[4.0,1],[6.0,1],[8.0]
显然【ComparisonCountingSort】算法是【不稳定】!
只要把if判断语句中的[小于]改成[小于或等于],新的[comparisoncounting _ steady]算法就稳定了!
使用[comparisonCountingsort _ steady]算法排序的结果:
[[1.0, 1], [1.0, 2], [1.0, 3], [2.0, 1], [3.0, 1], [3.0, 2], [4.0, 1], [6.0, 1], [8.0, 1], [8.0, 2], [9.0, 1], [9.0, 2], [10.0, 1]]
主程序完成了。
测试日志:
请输入一系列要排序的数字(用空格分隔):60 35 81 98 14 47
您输入的六个值是:[60.0,35.0,81.0,98.0,14.0,47.0]
[提示]:您输入的序列中的每个元素都标记了其出现的时间:
[[60.0, 1], [35.0, 1], [81.0, 1], [98.0, 1], [14.0, 1], [47.0, 1]]
使用标题[1.3.1]中的算法[ComparisonCountingSort]进行排序:
升序排列的结果:[[14.0,1],[35.0,1],[47.0,1],[60.0,1],[81.0,1],[98.0,1]]
很明显:【ComparisonCountingSort】算法【不稳定】!
只要把if判断语句中的[小于]改成[小于或等于],新的[comparisoncounting _ steady]算法就稳定了!
使用[comparisonCountingsort _ steady]算法排序的结果:
[[14.0, 1], [35.0, 1], [47.0, 1], [60.0, 1], [81.0, 1], [98.0, 1]]
主程序完成了。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。