前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >基本排序算法

基本排序算法

作者头像
Meet相识
发布2018-09-12 16:38:06
2930
发布2018-09-12 16:38:06
举报
文章被收录于专栏:技术专栏技术专栏
  • o(n^2)级别排序算法

为什么要学习O(n^2)的排序方法?

● 基础 ● 编码简单,易于实现,是一些简单情景的首选 ● 在一些特殊情况下,简单的排序算法更有效 ● 简单的排序算法思想衍生出复杂的排序算法 ● 作为子过程,改进更复杂的排序算法

1.选择排序 Selection Sort

每次选择没有排序部分的最小值和第一位交换

代码语言:javascript
复制
def selection_sort(org_arr, length):
    """
    选择排序,每次选择未排序部分的最小值和未排序部分的第一位交换位置
    :param org_arr: 待排序数组
    :param length: 待数组长度
    :return:
    """
    for i in range(0, length):
        # 寻找[i,n)区间里的最小值
        main_index = i
        for j in range(i+1, length):
            if org_arr[j] < org_arr[main_index]:
                main_index = j
        org_arr[i], org_arr[main_index] = org_arr[main_index], org_arr[i]

2.插入排序 Insertion Sort

从左到右遍历每一个元素,每次将这个元素和前面的元素一一比较,如果比某个元素小,则跟其交换

代码语言:javascript
复制
def insert_sort(arr, n):
    """
    选择排序,每次选择未排序部分的最小值和未排序部分的第一位交换位置
    :param arr:
    :param n:
    """
    for i in range(0, n):
        # 寻找元素arr[i]合适的插入位置

        e = arr[i]
        j = i  # j保存元素e应该插入的位置
        while arr[j-1] > e and j > 0:
            arr[j] = arr[j-1]
            j -= 1
        arr[j] = e
* 选择排序一个特别重要的性质:当找到合适的位置以后(arr[j-1] > e),可以提前终止内层循环

这使得在一个近乎有序的数组在进行插入排序的时候,效率要高的多,设置比o(logn)的算法效率还要高 当排序一个完全排序的数组时,插入排序的算法复杂度为o(n)级别

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018.03.15 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 为什么要学习O(n^2)的排序方法?
  • 1.选择排序 Selection Sort
  • 2.插入排序 Insertion Sort
    • * 选择排序一个特别重要的性质:当找到合适的位置以后(arr[j-1] > e),可以提前终止内层循环
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档