冒泡排序和选择排序详解(python)
文章目录一、冒泡排序Bubble Sort二、选择排序Select sort总结一、冒泡排序Bubble Sort从小到大进行冒泡排序依次比较相邻两个数字如果前一个数字比后一个数字大就交换数据直到第一轮循环结束将最大数“冒泡到数组末尾”第二轮将第二大的数排在倒数第二位…直到所有元素排序完成。list[5,3,8,4,2]lengthlen(list)foriinrange(length-1):#6个数只要循环5次flagTrue#falg为退出条件forjinrange(length-i-1):if(list[j]list[j1]):list[j],list[j1]list[j1],list[j]#交换数据flagFalseifflag:#如果一轮循环一次都没交换说明全部都有序了breakprint(list)手动推演示例数组 [5,3,8,4,2]第一轮把最大值 8 移到最后53 交换 → [3,5,8,4,2]58 不换84 交换 → [3,5,4,8,2]82 交换 → [3,5,4,2,8]末尾固定最大值8第二轮把第二大 5 移到倒数第二位35 不换54 交换 → [3,4,5,2,8]52 交换 → [3,4,2,5,8]末尾固定5,8第三轮把 4 移到倒数第三位34 不换42 交换 → [3,2,4,5,8]末尾固定4,5,8第四轮把 3 移到倒数第四位32 交换 → [2,3,4,5,8]全部排序完成结果从小到大。二、选择排序Select sort每一轮寻找最小的数从小到大进行排序例如第一轮循环寻找最小数将最小数和第一个数交换。第二轮循环从第二个数开始第一个数已经排好序再寻 找最小的数和第二个数交换。…list[5,3,8,4,2]lengthlen(list)foriinrange(length-1):#循环次数len-1次即可min_indexi#最小值的下标forjinrange(i1,length):iflist[j]list[min_index]:min_indexjlist[i],list[min_index]list[min_index],list[i]#交换数据print(list)手动推演示例数组 [5,3,8,4,2]第 1 轮i0 [5,3,8,4,2]最小的数是 2交换 2 和 5的值 → [2,3,8,4,5]第 2 轮i1最小的数是 3无需交换数组不变第 3 轮i2最小的数是 4交换 4 和 8的值 → [2,3,4,8,5]第 4 轮i3最小的值是 5交换 5 和 8的值 → [2,3,4,5,8]总结排序最好时间复杂度最坏时间复杂度交换次数稳定性冒泡排序最好时间复杂度 O(n)最坏时间复杂度O(n^2)多稳定选择排序最好时间复杂度 O(n^2)最坏时间复杂度O(n^2)每轮最多 1 次不稳定稳定性相等的数据交换前后相对位置不换稳定例如[2,3,8,4,5,2]排序后[2,2,3,4,5,8]原来数据第一个2在第一位最后一个2在第二位就是稳定相反第一个2在第二位最后一个2在第一位就是不稳定