Nim 编程实现快速排序

作者: Python高效编程 | 来源:发表于2019-08-29 08:44 被阅读0次

快速排序是一种平均时间复杂度为 nlog(n) 的原地排序,很适合大规模数据排序。它采用一种分而治之的手段,划分子问题,并递归地求解问题,最后将子问题的解合并为原问题的解。

快速排序的思想:在待排序列表中寻找一个分位点,处理列表,使得分位点左边是小于分位点处元素的子列表,而分位点右面是大于分位点元素的子列表。然后在子列表中选取分位点,重复上述操作,直到列表为单元素列表,合并子列表即可得到有序列表。

预处理
随机产生分位点

将分位点处的元素与首元素交换

交换
使变量 i “指向” 第二个元素,而变量 j “指向” 末尾元素。向右移动变量 i(i ++),直到变量 i “指向” 一个大于分位点的数值。这时向左移动变量 j (j --),直到变量j “指向” 一个小于分位点的元素。如果这时 i < j,那么就交换 i, j所在位置的元素。如果 i > j,跳出循环,并交换 j 和首地址所在位置的元素。

到这时,我们已经成功找到一个分位点。分位点左面的元素都小于等于分位点元素,分位点右面的元素都大于等于分位点元素。我们然后继续在左右部分各自寻找新的分位点。

最终代码

### 微信公众号:nim编程
import random


# 交换元素
proc swap(list: var seq[int], i: int, j: int) =
  let temp = list[i]
  list[i] = list[j]
  list[j] = temp 


proc qsort(list: var seq[int], lo: int, hi: int) =
    # 基准条件
    if lo >= hi:
      return 
    # 选取分位点
    let pivot = rand(lo..hi)
    var i = lo + 1
    var j = hi
    swap(list, lo, pivot)
    var running = true
    while running:
      while list[i] < list[lo] and i < hi:
        i += 1
      while list[j] > list[lo] and j > lo:
        j -= 1
      if i < j:
        swap(list, i, j)
      else:
        running = false
    swap(list, lo, j)
    # 递归求解子问题
    qsort(list, lo, j - 1)
    qsort(list, j + 1, hi)




proc quicksort(list: var seq[int]) = 
  qsort(list, 0, list.len - 1)

运行结果:

### 微信公众号:nim编程
var s = @[1, 4, 2, 9, 13, 5, 3, 19]
echo s
==> @[1, 4, 2, 9, 13, 5, 3, 19]
quicksort(s)
echo s
==> @[1, 2, 3, 4, 5, 9, 13, 19]
关注微信公众号:nim编程。

相关文章

  • Nim 编程实现快速排序

    快速排序是一种平均时间复杂度为 nlog(n) 的原地排序,很适合大规模数据排序。它采用一种分而治之的手段,划分子...

  • 7天练|Day3:排序和二分查找

    关于排序和二分查找的几个必知必会的代码实现排序实现归并排序、快速排序、插入排序、冒泡排序、选择排序编程实现O(n)...

  • 归并排序(Swift)

    最近在学习算法,归并排序和快速排序都用到分治思想,编程实现方式是通过递归。本文旨在给Swift语言开发者提供编程思...

  • 算法排序之归并排序和快速排序

    归并排序和快速排序用的都是分治的思想,用递归的编程技巧来实现.咱们先来看归并排序. 归并排序 归并排序的核心思想就...

  • go实现快速排序

    第一,单线程实现快速排序 第二,多线程实现快速排序

  • 七大排序算法之快速排序

    七大排序算法之快速排序 @(算法笔记)[排序算法, 快速排序, C++实现] [TOC] 快速排序的介绍: 快速排...

  • 快速排序的Python实现

    目录 快速排序的介绍 快速排序的Python实现 快速排序的介绍 快速排序(quick sort)的采用了分治的策...

  • Nim核心编程

    第一部分Nim核心编程 第1章欢迎来到Nim世界 1.1什么是Nim..........................

  • 排序算法

    排序 1. 选择排序 代码实现 2. 插入排序 代码实现 3. 冒泡排序 代码实现 4. 快速排序 代码实现

  • 【Python】(十五)Python中的排序(1)

    排序是编程中最为常见的操作之一,也是极为基础的算法。本节将快速回顾几种经典的排序方式,并用python实现它们。为...

网友评论

    本文标题:Nim 编程实现快速排序

    本文链接:https://www.haomeiwen.com/subject/dvjbectx.html