火龙信奥
  • 首页
  • 课程
  • 题库
  • 打卡
    • 代码对战
    • 快速对战
  • 题单
  • 团队
  • 荣誉墙
  • 商城
  • 登录 / 注册

第 7 讲. 去重与去重排序

作者: 作者的头像   huolong , 时间:2024-07-28 16:06:22 , 所有人可见, 阅读  9

第7讲. 去重与去重排序

1. 去重

去除数组 a[0~n-1]中的重复元素。有重复的元素保留1 个。 查找,发现重复则删除。

(1)保持原有顺序关系

tail = len(a)
i = 0
while i<tail-1:
    j = i + 1
    while j<tail:
        if a[i]==a[j]:
            for k in range(j+1,tail):
                a[k-1] = a[k]
            tail -= 1
        else:
            j += 1
    i+=1
print(a[:tail])

2)不保持原有顺序关系

tail = len(a)
i = 0
while i<tail-1:
    j = i + 1
    while j<tail:
        if a[i]==a[j]:
            a[j] = a[tail-1] ; tail -= 1
        else:
            j += 1
    i+=1
print(a[:tail])

2. 去重并排序

(1)用冒泡排序实现(去重并排升序)

tail = len(a)
i = 0
while i<tail:
    # [i, tail-1]
    j = tail-1
    while i<j:
        if a[j-1]>a[j]:
            a[j-1],a[j] = a[j],a[j-1]
        elif a[j-1]==a[j]:
            a[j] = a[tail-1]; tail -= 1
        j -= 1
    i += 1
print(a[:tail])

(2)用选择排序实现(去重并排升序)

方法 1:从前往后遍历攻擂手

tail = len(a)
i = 0
while i<tail-1:
    # 未定义区间[i, tail-1]
    k=i
    j = i+1
    while j<tail:
        if a[j] < a[k]:
            k=j
        elif a[j]==a[i]:
            a[j] = a[tail-1]
            if k == tail-1:
                k = j 
            tail -= 1
            j -= 1
        j += 1
    if k!=i : 
        a[i],a[k] = a[k],a[i]
        i-=1
    i +=1
print(a[:tail])

方法 2:从后往前遍历攻擂手

tail = len(a)
i = 0
while i<tail-1:
    # 未定义区间[i, tail-1]
    k=i
    j = tail-1
    while j>i:
        if a[j] < a[k]:
            k=j
        elif a[j]==a[i]:
            a[j] = a[tail-1]
            if k == tail-1:
                k = j 
            tail -= 1
        j -= 1
    if k!=i : 
        a[i],a[k] = a[k],a[i] 
        i-=1
    i+=1
print(a[:tail])

—— 本文来自火龙信奥(义乌睿码科技):义乌青少年信息学奥赛与编程教育平台,专注 CSP-J/S、NOIP、GESP 竞赛培训,线上线下融合教学,助力编程升学。网址:hlcoding.com

©2026加盟我们 | 关于我们 | ACM课程 | 常见问题 | 成果墙 | 评测记录 | 浙ICP备2021013995号
在线画图 | OI WIki | 打字练习
火龙信奥
请输入登录信息


请完成安全验证
验证码底图 滑块
向右拖动滑块完成验证
请输入用户名 / 绑定的手机号码



请输入注册信息(手机号验证码注册)





验证码5分钟有效,60秒内不可重复获取,每日最多3次

微信登录

微信登录二维码

正在生成二维码...

账号已过期,请续期。
去续期

绑定手机号

📱

为了更好地保护您的账号安全,享受完整的平台服务

请您尽快绑定手机号码