博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
各种排序
阅读量:6344 次
发布时间:2019-06-22

本文共 3945 字,大约阅读时间需要 13 分钟。

面试官就爱这些,写不出来,基础太差,soanyway,随时都能写出来。 

1.冒泡排序,T(n) = O(n**2)

# 冒泡排序,T(n) = O(n**2)def bubble_sort(li):    print(li)    for i in range(len(li)-1):  # i代表第几趟        for j in range(len(li) - i - 1): # j代表每趟过程中的下标            if li[j] > li[j + 1]:                li[j], li[j +1] = li[j + 1], li[j]        print(li)    return li# bubble_sort([9,8,7,6,5,4,3,2,1])

  

2.选择排序,T(n) = O(n**2)

# 选择排序def select_sort(li):    for i in range(len(li)-1):        min_index = i        for j in range(i, len(li)):            if li[j] < li[min_index]:                min_index = j        li[i],li[min_index] = li[min_index], li[i]    return li# print(select_sort([1,9,2,8,3,6,4,5,7]))
 

3.插入排序,T(n) = O(n**2)

# 插入排序,def insert_sort(li):    for i in range(1, len(li)):  # i代表每次摸到的牌的下标        tmp = li[i]        j = i - 1   # j代表手里最后一张牌的下标        while True:            if j < 0 or tmp >= li[j]:                break            li[j + 1] = li[j]            j -= 1        li[j + 1] = tmp    return li

  

lowbi3人组(冒泡,选择,插入),为什么说low,因为复杂度是O(n**2)

 

4.快速排序,T(n) = O(nlogn)  

java/c++ 等内置的排序算法【17111星辰崩】

# 快速排序def quick_sort(li, left, right):    if left < right:        mid = partition(li, left, right)        quick_sort(li, left,  mid-1)        quick_sort(li, mid+1, right)def partition(data, left, right):    tmp = data[left]    while left < right:        while left < right and data[right] >= tmp:            right -= 1        data[left] = data[right] # 第一次不满足条件时,right值固定        while left < right and data[left] <= tmp:            left += 1        data[right] = data[left]    data[left]=tmp    return leftprint(quick_sort(li, 0, len(li)-1))print(li)

  

5.堆排序,T(n) = O(nlogn)

# 堆排序def sift(data, low, high):    """    调整函数    data: 列表    low:待调整的子树的根位置    high:待调整的子树的最后一个节点的位置    """    i = low    j = 2 * i + 1    tmp = data[i]    # i指向空位置    while j<=high:      #领导已经撸到底了        if j != high and data[j] < data[j+1]:            j += 1        #j指向数值大的孩子        if tmp < data[j]:   #如果小领导比撸下来的大领导能力值大            data[i] = data[j]            i = j            j = 2*i+1        else:            break       #撸下来的领导比候选的领导能力值大    data[i] = tmpdef heap_sort(data):    n = len(data)    # 建堆    for i in range(n//2-1, -1, -1):        sift(data, i,  n - 1)    # 挨个出数    for high in range(n - 1, -1, -1):        data[0], data[high] = data[high], data[0]        sift(data, 0, high - 1)

  

6.归并排序,T(n) = O(nlogn)

# 归并排序def merge(li, low, mid, high):    i = low    j = mid + 1    ltmp = []    while i <= mid and j <= high:        if li[i] <= li[j]:            ltmp.append(li[i])            i += 1        else: # li[i]>li[j]            ltmp.append(li[j])            j += 1    while i <= mid:        ltmp.append(li[i])        i += 1    while j <= high:        ltmp.append(li[j])        j += 1    li[low:high+1]=ltmpdef mergesort(li, low, high):    if low < high:        mid = (low + high) // 2        mergesort(li, low, mid)        mergesort(li, mid+1, high)        merge(li, low, mid, high)

  

7.希尔排序

#include 
// 分类 -------------- 内部比较排序// 数据结构 ---------- 数组// 最差时间复杂度 ---- 根据步长序列的不同而不同。已知最好的为O(n(logn)^2)// 最优时间复杂度 ---- O(n)// 平均时间复杂度 ---- 根据步长序列的不同而不同。// 所需辅助空间 ------ O(1)// 稳定性 ------------ 不稳定void ShellSort(int A[], int n){ int h = 0; while (h <= n) // 生成初始增量 { h = 3 * h + 1; } while (h >= 1) { for (int i = h; i < n; i++) { int j = i - h; int get = A[i]; while (j >= 0 && A[j] > get) { A[j + h] = A[j]; j = j - h; } A[j + h] = get; } h = (h - 1) / 3; // 递减增量 }}int main(){ int A[] = { 5, 2, 9, 4, 7, 6, 1, 3, 8 };// 从小到大希尔排序 int n = sizeof(A) / sizeof(int); ShellSort(A, n); printf("希尔排序结果:"); for (int i = 0; i < n; i++) { printf("%d ", A[i]); } printf("\n"); return 0;}

  

 

 

 

 

 

 

 

 

转载于:https://www.cnblogs.com/adamans/articles/7570893.html

你可能感兴趣的文章
微信开发之发红包
查看>>
一键lnmp脚本&&php扩展模块安装(适用于CENTOS6.X系列)
查看>>
二维观察---文字的裁剪
查看>>
矩形覆盖
查看>>
ICMP
查看>>
界面设计模式(第2版)(全彩)
查看>>
解决VMware Workstation错误:未能锁定文件
查看>>
CentOS6 手动编译升级 gcc
查看>>
memcached的安装与开启脚本
查看>>
Linux与Window字符集~~伤不起的幽灵空白符
查看>>
zabbix 邮件报警 -- sendmail
查看>>
JavaScript异步编程
查看>>
tcpdump用法小记
查看>>
MySQL基础安全注意细节
查看>>
Oracle随机函数—dbms_random
查看>>
pvr 批量转换
查看>>
linux命令basename使用方法
查看>>
windows下开发库路径解决方案
查看>>
linux迁移mysql数据目录
查看>>
脚本源码安装LNMP
查看>>