冒泡排序,选择排序,插入排序

冒泡排序:

  定义:

    依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。

    至此第一趟结束,将最大的数放到了最后。在第二趟:仍从第一对数开始比较(因为可能由于第2个数和第3个数的交换,使得第1个数不再小于第2个数),将小数放前,大数放后,一直比较到倒数第二个数(倒数第一的位置上已经是最大的),第二趟结束,在倒数第二的位置上得到一个新的最大数(其实在整个数列中是第二大的数)。如此下去,重复以上过程,直至最终完成排序。

    由于在排序过程中总是小数往前放,大数往后放,相当于气泡往上升,所以称作冒泡排序。

  实现:

 1 """冒泡排序"""
 2 Def  Fun(list):
 3     #序列长度
 4     N=len(list)
 5     #构造外层循环,每次循环可协助内层循环找到一个最大值
 6     For x in range(n-1):
 7         #内层循环,循环一遍找到一个最大值
 8         For y in range(n-1-x):
 9             #比较相邻的两个值得大小,如果左边值大,就交换变量值
10             If list[y]>list[y+1]:
11                 #交换变量值
12                 List[y],list[y+1]=list[y+1],list[y]
13 If __name__=="__main__":
14     List=[1,3,5,7,9,0,8,6,4,2]
15     Fun(list)
16 Print(list)

选择排序:

  定义:

    初始时在序列中找到最小(大)元素,放到序列的起始位置作为已排序序列;然后,再从剩余未排序元素中继续寻找最小(大)元素,放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。

  实现:

 1 """选择排序"""
 2 Def  Fun(list):
 3     #列表长度
 4     N=len(list)
 5     :#当n=13时,为0到12,因为每循环一次都有一个值被找到,所以在减一
 6     For x in range(n-1):
 7         #
 8         #设置默认值1
 9         Mit=x
10         For y in range(x+1,n):
11             If list[mit]>list[y]:
12             Mit=y
13         If mit!=x:
14             List[mit],list[x]=list[x],list[mit]
15 If __name__=="__main__":
16     List=[1,3,5,7,9,0,8,6,4,2]
17     Fun(list)
18     Print(list)

冒泡与选择的区别:

  冒泡排序通过依次交换相邻两个顺序不合法的元素位置,从而将当前最小(大)元素放到合适的位置;而选择排序每遍历一次都记住了当前最小(大)元素的位置,最后仅需一次交换操作即可将其放到合适的位置

 

插入排序:

  定义:

    通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。

  算法步骤:

    将第一待排序序列第一个元素看做一个有序序列,把第二个元素到最后一个元素当成是未排序序列。

    从头到尾依次扫描未排序序列,将扫描到的每个元素插入有序序列的适当位置。(如果待插入的元素与有序序列中的某个元素相等,则将待插入元素插入到相等元素的后面。)

  实现:

1 def insertionSort(arr):
2     for i in range(len(arr)):
3         preIndex = i-1
4         current = arr[i]
5         while preIndex >= 0 and arr[preIndex] > current:
6             arr[preIndex+1] = arr[preIndex]
7             preIndex-=1
8         arr[preIndex+1] = current
9     return arr

 

posted @ 2020-03-25 15:55  青年才俊001  阅读(168)  评论(0编辑  收藏  举报