数据结构与算法_排序_稳定性算法

稳定算法


前言

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

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

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

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

二、稳定性算法

 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、若经过排序,这些记录的 相对次序保持不变 , 则称这种排序算法是稳定的, 否则称为不稳定的 记忆:具有相同关键字的纪录经过排序后,相对位置保持不变,这样的算法是稳定性算法
  • 16
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值