python之算法练习
1.冒泡排序
冒泡排序的核心思想是相邻的两个数据进行比较,假设数列A有n个数据,先比较第1个和第2个数据,如果A1 > A2,则交换他们的位置,确保较大的那个数在右侧。
接下来比较A2和A3,采用相同的规则,较大的数向右移动,最后会比较An-1 和An的大小,如果An-1 > An,那么交换他们的位置,这时,An是数列中的最大值。
你肯定已经发现,经过这一轮比较后,数列仍然是无序的,但是没有关系,我们已经找到了最大值An,而且它在队列的末尾。
接下来要做的事情,就是简单的重复之前的过程,整个数列,先暂时把An排除在外,这n-1个无序的数,仍然可以采用之前的方法,找出n-1个数当中的最大值,这样An-1就是第2大的数,继续对n-2个数做相同的事情。
1.1 冒泡排序示例:
#coding=utf-8; #第一次排序,末位为最大数 def maopao(lst): for i in range(0,len(lst)-1): if lst[i]>lst[i+1]: #两数比较大小,交换 lst[i],lst[i+1]=lst[i+1],lst[i]; print lst; #len(lst)-1,需要5次循环,才能完成一次排序 def xunhuancount(lst): for i in range(len(lst),1,-1): maopao(lst); if __name__ == "__main__": lst = [7,4,5,1,6,3]; # maopao(lst); xunhuancount(lst);
运行结果:
[4, 7, 5, 1, 6, 3] [4, 5, 7, 1, 6, 3] [4, 5, 1, 7, 6, 3] [4, 5, 1, 6, 7, 3] [4, 5, 1, 6, 3, 7] [4, 5, 1, 6, 3, 7] [4, 1, 5, 6, 3, 7] [4, 1, 5, 6, 3, 7] [4, 1, 5, 3, 6, 7] [4, 1, 5, 3, 6, 7] [1, 4, 5, 3, 6, 7] [1, 4, 5, 3, 6, 7] [1, 4, 3, 5, 6, 7] [1, 4, 3, 5, 6, 7] [1, 4, 3, 5, 6, 7] [1, 4, 3, 5, 6, 7] [1, 3, 4, 5, 6, 7] [1, 3, 4, 5, 6, 7] [1, 3, 4, 5, 6, 7] [1, 3, 4, 5, 6, 7] [1, 3, 4, 5, 6, 7] [1, 3, 4, 5, 6, 7] [1, 3, 4, 5, 6, 7] [1, 3, 4, 5, 6, 7] [1, 3, 4, 5, 6, 7]
2.插入排序
插入排序,一般也被称为直接插入排序。对于少量元素的排序,它是一个有效的算法。插入排序是一种最简单的排序方法,它的基本思想是将一个记录插入到已经排好序的有序表中,从而一个新的、记录数增1的有序表。在其实现过程使用双层循环,外层循环对除了第一个元素之外的所有元素,内层循环对当前元素前面有序表进行待插入位置查找,并进行移动。
2.2 插入排序示例:
#coding=utf-8; lst = [2, 6, 9, 3, 7, 1]; #利用sorted对原有函数进行排序,然后把要插入得数据插入到末位,再进行插入排序; lstadd = sorted(lst); lstadd.append(5); def insert(lsts): #创建两个变量存放插入的数据,和数据对应的索引。 tem = lstadd[len(lstadd)-1]; index = len(lstadd)-1; print lstadd,tem,index; while index> 0 and lstadd[index-1]>lstadd[index]: print "into while list:",lstadd; #两个数比较大小,相互交换位置。 lstadd[index] = lstadd[index-1]; lstadd[index-1]=lstadd[index]; #index=index-1:交换数据后插入数据的索引1 index-=1; print "change index:",index; #交换数据后,交换数据所在位置:lstadd[indes] lstadd[index] = tem;2 print lstadd; if __name__ =="__main__": print lstadd; insert(lstadd);
运行结果:
[1, 2, 3, 6, 7, 9, 5] [1, 2, 3, 6, 7, 9, 5] 5 6 into while list: [1, 2, 3, 6, 7, 9, 5] change index: 5 into while list: [1, 2, 3, 6, 7, 5, 9] change index: 4 into while list: [1, 2, 3, 6, 5, 7, 9] change index: 3 [1, 2, 3, 5, 6, 7, 9]
3.排序算法
选择排序算法通过选择和交换来实现排序,其排序流程如下: (1)首先从原始数组中选择最小的(或最大的)1个数据,将其和位于第1(n)个位置的数据交换。 (2)接着从剩下的n-1个数据中选择次小的1个元素,将其和第2(n)个位置的数据交换 (3)然后,这样不断重复,直到最后两个数据完成交换。最后,便完成了对原始数组的从小到大的排序
3.1 代码实现:
#coding=utf-8; def select_sort(lst): for i in range(len(lst)): min = i ; print lst; for j in range(min,len(lst)): #内循环一次,找出最小值,放在首位。第二次从第二个位置开始找第二最小值,放在第二位置,依次。 if lst[i] > lst[j]: lst[i],lst[j] = lst[j],lst[i]; min = j; print "里面:",lst; if __name__ == "__main__": lst = [5,2,1,9,3]; select_sort(lst); print lst;
运行效果:
[5, 2, 1, 9, 3] 里面: [2, 5, 1, 9, 3] 里面: [1, 5, 2, 9, 3] [1, 5, 2, 9, 3] 里面: [1, 2, 5, 9, 3] [1, 2, 5, 9, 3] 里面: [1, 2, 3, 9, 5] [1, 2, 3, 9, 5] 里面: [1, 2, 3, 5, 9] [1, 2, 3, 5, 9] [1, 2, 3, 5, 9]

浙公网安备 33010602011771号