The Fun Of Algorithm - Day8 - 冒泡排序

问题描述

对N个整数(数据由键盘输入)进行升序排列

问题分析

利用数组进行存储,利用两个相邻元素间进行比较交换的过程将一个无序表变成有序表。

假设数组元素的个数为n, 最糟的情况下需要比较的次数为((n-1)+(n-2)+…+2+1)=n(n-1)/2

算法设计

在这里插入图片描述

Code

# !/user/bin/python3
# -*- coding: utf-8 -*-
# @author: HHVic
# @desc: 冒泡排序

import time

# add timer to calculate the performance
# Basic performance
###############################################################

start = time.time()

def bubbleSort(a):
    #首先获取列表的总长度
    n=len(a)
    #进行n-1次比较,控制比较的轮数
    i=1
    while i<=n-1:
        #控制每轮比较的次数
        j=0
        while j<n-i:
            if a[j]>a[j+1]:
                t=a[j]
                a[j]=a[j+1]
                a[j+1]=t
            j+=1
        i+=1
    #打印每轮交换后的列表
    for a1 in a:
        print(a1,end=' ')

if __name__=='__main__':
    print('请为列表元素赋初值,列表末尾不能有空格:')
    x=input()
    a=x.split(' ') #空格方式分割每个元素
    for i in range(0,len(a)):
        a[i]=int(a[i])
    print('你输入的列表元素为:\n',a)
    print('经过交换后的数组元素为:')
    bubbleSort(a)
    print('\n')



end = time.time()
print("The Basic Runtime is {0}".format((end-start)))

结果

请为列表元素赋初值,列表末尾不能有空格:
4 5 2 7 3 8 2 1 5
你输入的列表元素为:
 [4, 5, 2, 7, 3, 8, 2, 1, 5]
经过交换后的数组元素为:
1 2 2 3 4 5 5 7 8 

The Basic Runtime is 18.147606134414673

扩展 - 选择排序

选择整个线性表, 第一轮比较那数组中的第一个元素与其他元素进行比较,遇到比第一个元素小的元素进行交换, 再拿着交换之后的第一个元素接着从上次比较的位置与后面的元素进行比较,知道扫描到线性表的最后。从中选出最小的元素,将它交换到表的最前面。第二轮比较的时候从第二个元素开始,依次第三个,第四个直到最后一个进行比较。在比较过程中有比第二个元素小的元素则进行交换,接着与后面的元素比较,对剩下的子表采用同样的方法,直到子表为空。

在这里插入图片描述
图片参考link

# !/user/bin/python3
# -*- coding: utf-8 -*-
# @author: HHVic
# @desc: 选择排序

import time

# add timer to calculate the performance
# Basic performance
###############################################################

start = time.time()

def selectionSort(a):
    n=len(a)
    for i in range(0,n-1):
        for j in range(i+1,n):
            if a[j] < a[i]:
                t=a[i]
                a[i]=a[j]
                a[j]=t
    for i in a:
        print(i,end=' ')

if __name__=='__main__':
    print('请为列表元素赋初值,列表末尾不能有空格:')
    x=input()
    a=x.split(' ') #空格方式分割每个元素
    for i in range(0,len(a)):
        a[i]=int(a[i])
    print('你输入的列表元素为:\n',a)
    print('经过交换后的数组元素为:')
    selectionSort(a)
    print('\n')



end = time.time()
print("The Basic Runtime is {0}".format((end-start)))
请为列表元素赋初值,列表末尾不能有空格:
34 02 3 897 21 97 4
你输入的列表元素为:
 [34, 2, 3, 897, 21, 97, 4]
经过交换后的数组元素为:
2 3 4 21 34 97 897 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值