数据结构与算法_排序

发布时间:2024年01月18日

稳定算法

目录

前言

一、什么是排序和排序算法?

二、稳定性算法

?1.什么是稳定性算法?

1.冒泡排序

2.插入排序

总结


前言

排序算法
? 所谓 排序 ,使一串记录,按照其中的 某个或某些关键字 的大小,递增或递减的排列起来的操作
? 排序算法 ,就是如何使得记录按照要求排列的方法
? 排序算法在很多领域是非常重要
大量数据 的处理方面:一个优秀的算法可以节省大量的资源。
各个领域 中考虑到数据的各种限制和规范,要得到一个符合实际的优秀算法,得经过大量的推理和分析

一、什么是排序和排序算法?

排序:使一串集录,按照其中的某个或某些关键字的大小递增递减.

排序算法:使记录递增递减的方法.

二、稳定性算法

?1.什么是稳定性算法?

具有相同关键字的记录经过排序后,相对位置保持不变,这样的算法算稳定性算法.

稳定性算法举例:冒泡排序、插入排序、归并排序和基数排序

1.冒泡排序

相邻位置两个元素 比较, 前面的元素 后面的元素 大则交换,
把最大的数给找到
经过一轮一轮的比较最终把序列给排序

?代码演示:

def bubble_sore(alist):
    """冒泡排序"""
    #数列的长度
    n  = len(alist)
    #外层循环控制轮数
    for i in range(0,n-1):
        #计数
        count=0
        #内层循环控制比较次数(相邻位置两个元素比较次数)
        for j in range(0,n-i-1):
            比较相邻的两个数字,符合要求交换位置
            if alist[j]>alist[j+1]:
                alist[j],alist[i+1]=alist[i+1],alist[i]
                count+=1
        # 若遍历完一遍历完之后,数字没有交换,说明序列有序,退出外层循环
        if count == 0:
            break

2.插入排序

插入排序的组成
插入算法把要排序的数组分成 两部分 :第一部分是 有序的数字 (这里可以默认数组第一个数字为有序的第一部分),第二
部分为 无序的数字 (这里除了第一个数字以外剩余的数字可以认为是无序的第二部分)

代码示例:

def insert_sort(alist):
    n = len(alist)
    # 外层循环控制轮次
    for i in range(1, n):
        # 内层循环控制 插入位置
        for j in range(i, 0, -1)
             # alist[i]为待插入的数据
             # 若待插入数据小于有序数据,则插入; 若待插入数据大于有序
             #数据,则break
            print("要插入的数 pk 要比较的数:", alist[i], alist[i - 1])
            if alist[i] < alist[i-1]:
                alist[i], alist[i-1] = alist[i-1], alist[i]
            else:
                break

总结

1、假定在待排序的记录序列中,存在 多个具有 相同的关键字 的记录
2、若经过排序,这些记录的 相对次序保持不变 , 则称这种排序算法是稳定的, 否则称为不稳定的 记忆:具有相同关键字的纪录经过排序后,相对位置保持不变,这样的算法是稳定性算法
文章来源:https://blog.csdn.net/m0_66672931/article/details/135643824
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。