冒泡排序,选择排序,插入排序
Posted errenjune
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了冒泡排序,选择排序,插入排序相关的知识,希望对你有一定的参考价值。
冒泡排序:
定义:
依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第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
以上是关于冒泡排序,选择排序,插入排序的主要内容,如果未能解决你的问题,请参考以下文章
排序算法学习(直接插入排序,希尔排序,选择排序,堆排序,冒泡排序)
[leetcode]排序算法(冒泡排序,选择排序,插入排序,快速排序,计数排序)
总结:大厂面试常考手撕代码 —— JavaScript排序算法(冒泡排序选择排序插入排序快速排序)
直接插入排序 ,折半插入排序 ,简单选择排序, 希尔排序 ,冒泡排序 ,快速排序 ,堆排序 ,归并排序的图示以及代码,十分清楚