面试-排序-(一)交换排序

一、交换排序:两两比较待排序的关键字,并交换不满足次序要求的那些偶对,直到全部满足为止。

常见的交换排序有冒泡排序和快速排序

1.冒泡排序

1)过程:比较相邻元素,使关键字较小的元素交换至关键字较大的元素之上,使得经过一次冒泡排序后,关键字最小的元素到达最顶端,接着找到第二小的元素,依次类推。

冒泡排序示意图

2)python实现:

def sort1(a):
    length = len(a) - 1
    exchange = True
    while length >= 1 and exchange:
        exchange = False
        for i in range(length):
            if a[i] > a[i + 1]:
                a[i], a[i + 1] = a[i + 1], a[i]
                exchange = True
        length -= 1
    return a

3)复杂度

空间复杂度:O(1)

时间复杂度:

平均 O( n^{2} )

最好 O(n) :初始数据序列正序时

最坏 O( n^{2} ) :初始数据序列反序时

2.快速排序:是由冒泡排序改进得来的

1)过程:在待排序的n个元素中任取一个元素(一般取第一个元素),把该元素放入最终位置后,整个数据区间被此元素分割成两个子区间。所有关键字比该元素小的放在前子区间,所有比它大的放在后子区间,并把该元素排在这两个子区间的中间,这个过程称作一趟快排。然对两个子区间重复上述过程,直至每个子区间只有一个元素为止。

快速排序示意图

2)python实现:

def sort2(a, low, high):
    if low >= high:
        return
    i, j = low, high
    tmp = a[low]
    while i < j:
        while i < j and a[j] > tmp:
            j -= 1
        a[i] = a[j]
        while i < j and a[i] <= tmp:
            i += 1
        a[j] = a[i]
    a[i] = tmp#最后i,j指向同一个元素
    #递归前后半区
    sort2(a, low,i-1)
    sort2(a,j+1,high)
    return a

 

3)复杂度

空间复杂度:O(log2n)

时间复杂度:

平均 O(nlog2n)

最好 O(nlog2n) :当数据随机分布时,快排性能越好

最坏 O( n^{2} ) :当数据接近有序时,快排效率最低

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值