排序的几种方法回顾

冒泡排序

冒泡排序: 是一种交换排序。 两两比较待排序元素,发现2个元素次序相反则进行交换,直到没有反序的元素为止。 
冒泡排序:通过无序区中相邻记录的关键字间的比较和位置的交换,使关键字最小的元素如气泡似的逐步上浮直水面。有序区逐渐扩大,无序区逐渐缩小。 

lists = [1, 9, 3, 5, 2, 0, 8, 7, 6, 4]

lenth = len(lists)

for i in range(lenth):
    inner_lenth = lenth - i
    for j in range(inner_lenth-1):
        first = lists[j]
        next = lists[j + 1]
        if first > next:
            lists[j], lists[j + 1] = lists[j + 1], lists[j]
print(lists)

插入排序

插入排序是一种理想排序,假设序列开头的数字有序,然后将后面的数字按顺序插入 到序列当中。

它把一个无序数列看成两个数列,假如第一个元素构成了第一个数列,那么余下的元素构成了第二个数列,很显然,第一个数列是有序的(因为只有一个元素嘛,肯定有序哦),那么我们把第二个数列的第一个元素拿出来插入到第一个数列,使它依然构成一个有序数列,直到第二个数列中的所有元素全部插入到第一个数列,这时候就排好序了。

插入排序
lists = [8, 3, 6, 5, 9, 2, 0, 4, 7, 1]
lenth = len(lists)
for i in range(lenth):
    while i > 0 and lists[i - 1] > lists[i]:
        # i > 0  目的  结束while循环  限制循环次数
        # i 》 0 从第二个个元素开始比较
        lists[i - 1], lists[i] = lists[i], lists[i - 1]
        i -= 1
print(lists)

选择排序

1、选择最小的值

2、遍历其他的值,如果小于最小值,和最小值互换位置

lists = [8, 3, 6, 5, 9, 2, 0, 4, 7, 1]
lenth = len(lists)
for i in range(lenth):
    for j in range(i + 1, lenth):
        outer_num = lists[i]
        inner_num = lists[j]
        if inner_num < outer_num:  # >  <  决定排序的方式  正序还是倒序
            lists[i], lists[j] = lists[j], lists[i]
            print(lists)
print(lists)

快速排序

快速排序的思路是依据一个中值数据项来把数据表分为两半:小于中值的一半和大于中值的一半,然后每部分分别进行快速排序

基本结束条件:数据表仅有一个数据项,自然是排好序的。

缩小规模:根据中值,将数据表分为两半,最好情况是相等规模的两半

调用自身:将两半分别调用自身进行排序

分裂数据表的目标:找到“中值”应处的位置

分为左和右两边同时进行排序

①设置左右标,左标向右移动,右标向左移动,

②左标一直向右移动,碰到比中值大的就停止,右标一直向左移动,碰到比中值小的就停止,然后把左右标所指的数据项交换

③继续前述的移动过程,直到左标移到右标的右侧,停止移动,这时右标所指的位置就是中值应处的位置,将中值和这个位置交换,分裂完成,左半部全比中值小,右半部都比中值大。

def quick_sort(lists, start, end):
    if start >= end:
        return
    mid = lists[start]
    low = start
    high = end

    while low < high:
        while low < high and lists[high] >= mid:
            high -= 1
        lists[low] = lists[high]
        while low < high and lists[low] < mid:
            low += 1
        lists[high] = lists[low]

    lists[low] = mid
    quick_sort(lists, start, low - 1)  # 左边
    quick_sort(lists, low + 1, end)  # 右边


lists = [8, 3, 6, 5, 9, 2, 0, 4, 7, 1]
quick_sort(lists, 0, len(lists) - 1)
print(lists)

猜你喜欢

转载自blog.csdn.net/weixin_44303465/article/details/89416767
今日推荐