排序算法:冒泡、选择、插入、希尔、快速

常见的排序方法:

1:冒泡排序

2:选择排序

3:插入排序

4:希尔排序

5:堆排序

6:归并排序

7:快速排序

一、冒泡排序:

思想:逐个对比,逐个交换,把一个最大值或最小值放到队列尾部,下一次将次大值或次小值放到倒数第二位,以此类推知道排序结束。

例:

将[2,3,1,5]排序:

list_01=[2,3,1,5]
for i in range(len(list_01)-1):
    for j in range(0,len(list_01)-1-i):
        if list_01[j]>list_01[j+1]:
            list_01[j],list_01[j+1]=list_01[j+1],list_01[j]
print(list_01)

结果为[1,2,3,5]

二、选择排序:

思想:选择排序就是让列表中的第一个数值,第二个数值,第三个数值跟他后面的数据进行比较(不跟本数据前面的数据进行比较),后面的数据有小于该数据的数(Data),就让数Data跟第N数进行位置交换。

例:

list=[54,76,12,500,200,43,1,22]
for i in range(len(list)):
    min_index=i
    for j in range(i+1,len(list)):
        if list[min_index]>list[j]:
            min_index=j
    list[i],list[min_index]=list[min_index],list[i]
print(list)

过程:

1:找到后八个数中最小的是1,将1与第一个数(54交换)

结果为[1,76,12,500,200,43,54,22]

2::找到后七个数中最小的是12,与第二个数交换

3:找到后六个数中最小的是22,与第三个数交换

以此类推

三、插入排序

思想:先将列表的第一个数单独算成一部分,其余的数算作第二部分,每次将第二部分的最小值插入第一部分的值后面,将该值与第一部分中已经存在的值从后往前依次比较,直到找到其应在的位置。

例:

list=[54,26,93,17,77,31,44,55,20]
for i in range(1,len(list)):   #代表从下标为1的位置开始拿数与前面的比较,再拿下标为2的数与前面的数进行比较
    for j in range(i,0,-1):
        if list[j]<list[j-1]:
            list[j],list[j-1]=list[j-1],list[j]
print(list)

结果:

[17, 20, 26, 31, 44, 54, 55, 77, 93]

过程:

1:将26插入[54],并比较26和54,因为26<54,所以第一部分变为[26,54]

2:将93插入第一部分,比较93和54,因为93>54,所以第一部分变为[26,54,93]

以此类推

四、希尔排序:

思想:希尔排序是插入排序的一种。也叫做缩小增量排序。是直接插入排序的更高效的改进版。希尔排序是非稳定排序算法。

希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越

多,当增量减至1时,整个文件恰被分成一组,算法便终止。

例:

[54,26,93,17,77,31,44,55,20,70]

第一次:增量为5:

54与31比较:31---54

26与44比较:26---44

93与55比较:55---93

17与20比较:17---20

77与70比较:70---77

第一次结果为[31,26,55,17,70,54,44,93,20,77]

第二次:增量为2:

31---55---70---44---20:20---31---44---55---70

---26---17---54---93---77:17---26---54---77---93

第二次结果为[20,17,31,26,44,54,55,77,70,93]

第三次:增量为1:

结果[17,20,26,31,44,54,55,70,77,93]

五、快速排序:

思想:先将列表的第一个数单独算成一部分,其余的数算作第二部分,生成代表low和代表high的两个指针,low从第二部分的左边向右移动,high从第二部分的右边向左移动,如果low位置的数大于high位置的数,则将两个位置的数字交换,然后两个指针继续向中间移动,直到low=high时,将第一部分的数插入该位置前面,此时该数字左边的数字都比他小,右边的数都比他大。此时列表的第一个数和后面的数分开进行第二轮比较。(看元素最终放到有序序列的哪个位置)

猜你喜欢

转载自blog.csdn.net/weixin_43800846/article/details/88981676