Created by jinhan on --.
   Tip: http://blog.csdn.net/zhengqijun_/article/details/53038831
   See: https://github.com/hunterhug/GoAlgorithm
# 定义
快速排序由C. A. R. Hoare在1962年提出。快速排序是对冒泡排序的一种改进,采用了一种分治的策略。

# 基本思想
通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。

# 步骤
1. 先从数列中取出一个数作为基准数。
2. 分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。
3. 再对左右区间重复第二步,直到各区间只有一个数。
# 实现
package main

import "fmt"

/************************************
 *函数名:quicksort
 *作用:快速排序算法
 *参数:
 *返回值:无
 *模拟:
    begin:[]int{12, 85, 25, 16, 34, 23, 49, 95, 17, 61}
    -->[],12,[25 16 34 23 49 95 17 61]
    ---->[23 16 17],25,[95 49 61 85]
    ------>[17 16],23,[]
    -------->[16],17,[]
    ---------->[],16,[]
    ------>[34 49 61 85],95,[]
    -------->[],34,[61 85 95]
    ---------->[49],61,[95]
    ------------>[],49,[]
    ------------>[85],95,[]
    -------------->[],85,[]
    last:[]int{12, 16, 17, 23, 25, 34, 49, 61, 85, 95}

 ************************************/
func quicksort(array []int, begin, end int, mark string) {
    var i, j int
    if begin < end {
        i = begin +  // 将array[begin]作为基准数,因此从array[begin+1]开始与基准数比较!
        j = end       // array[end]是数组的最后一位

        for {
            if i >= j {
                break
            }
            if array[i] > array[begin] {
                array[i], array[j] = array[j], array[i]
                j = j -
            } else {
                i = i +
            }

        }

        /* 跳出while循环后,i = j。
         * 此时数组被分割成两个部分  -->  array[begin+1] ~ array[i-1] < array[begin]
         *                           -->  array[i+1] ~ array[end] > array[begin]
         * 这个时候将数组array分成两个部分,再将array[i]与array[begin]进行比较,决定array[i]的位置。
         * 最后将array[i]与array[begin]交换,进行两个分割部分的排序!以此类推,直到最后i = j不满足条件就退出!
         */
        if array[i] >= array[begin] { // 这里必须要取等“>=”,否则数组元素由相同的值时,会出现错误!
            i = i -
        }

        array[begin], array[i] = array[i], array[begin]
        //fmt.Printf("%s>sort:%v\n", mark, array[begin:end])
        fmt.Printf("%s>%v,%d,%v\n", mark, array[begin:i], array[i], array[j:end])
        quicksort(array, begin, i, mark+"--")
        quicksort(array, j, end, mark+"--")
    }
}

func main() {

    nums := [], , , , , , , , , }
    fmt.Printf("begin:%#v\n", nums)

    // 缩进
    mark := "--"
    quicksort(nums, , len(nums)-, mark)
    fmt.Printf("last:%#v\n", nums)
}

快速排序Golang版本的更多相关文章

  1. 基于visual Studio2013解决算法导论之009快速排序随机版本

     题目 快速排序随机版本 解决代码及点评 #include <stdio.h> #include <stdlib.h> #include <malloc.h> ...

  2. 上传golang 版本SDK

    在上传的时候,文件都上传成功了,但是返回的信息里面errcode 404 token 是"".是不是因为我的callbackUrl(随便写的) 写错导致的. 上传golang 版本 ...

  3. Golang版本的rocksdb-对gorocksdb的封装

    rocksdb的优秀特性不用多说,但是它是用c++语言写的,就是这一个特点就把很多人拦住了.虽然rocksdb官方也有Java版本,但是Golang的发展速度让人不容小觑,而且由于golang原生对高 ...

  4. Golang 版本发布 与 TIOBE 排名

    2016年国庆节(10月1日)开始接触 Go 语言,记录一下它的 版本发布 与 TIOBE 排名: Golang 排行榜 月份 版本 排名 备注 2012.03 1.0             201 ...

  5. golang 版本升降之后报错——imports runtime: C source files not allowed when not using cgo or SWIG

    问题: golang 升级或者降级版本之后,执行编译报错如下: package github.com/onsi/ginkgo/ginkgo imports runtime: C source file ...

  6. 面试经典算法:快速排序Golang实现

    Golang快速排序 定义 快速排序由C. A. R. Hoare在1962年提出.快速排序是对冒泡排序的一种改进,采用了一种分治的策略. 基本思想 通过一趟排序将要排序的数据分割成独立的两部分,其中 ...

  7. [原创] linux 下上传 datapoint数据到yeelink 【golang版本】同时上传2个数据点

    /* Create by sndnvaps<sndnvaps@gmail.com> * data: 2015-04-12* upload 2 datapoint to yeelink.ne ...

  8. golang 版本 gearman 试用

    g2 是golang 版的gearman 实现,包含了server (支持leveldb,以及metrics).client 代码.worker 代码 使用上还是很方便的,同时部署也比较简单,结合do ...

  9. EasyDarwin开源流媒体服务器Golang版本:服务端录像功能发布

    EasyDarwin开源流媒体服务器(www.easydarwin.org)现在使用Go版本实现了.最新的代码提交,已经支持了推流(或者拉流)的同时进行本地存储. 本地存储的原理,是在推流的同时启动f ...

随机推荐

  1. 神经网络JOONE的实践

    什么是joone Joone是一个免费的神经网络框架来创建,训练和测试人造神经网络.目标是为最热门的Java技术创造一个强大的环境,为热情和专业的用户. Joone由一个中央引擎组成,这是Joone开 ...

  2. 博客收藏--sailing的博客

    http://blog.sina.com.cn/sailingxr free:这个博客主页的内容不错 PC的足迹 arm与x86 浅谈PCIe体系架构 浅谈cache memory

  3. (转) Redis学习教程--基本命令

    原文出自:http://www.cnblogs.com/woshimrf/p/5198361.html 目录 全局操作:1.redis是key-value存储的,放在内存中,并在磁盘持久化的数据结构存 ...

  4. HDFS 简介

    hadoop分别从3个角度将主机划分为2种角色 最基本的是Master 和 从HDFS角度,将主机划分为namenode和datanode,在分布式文件系统中,目录管理很重要,管理目录相当于主人 从m ...

  5. Java集合框架体系详细梳理,含面试知识点。

    一.集合类 集合的由来: 面向对象语言对事物都是以对象的形式来体现,为了方便对多个对象的操作,就需要将对象进行存储,集合就是存储对象最常用的一种方式. 集合特点: 1,用于存储对象的容器.(容器本身就 ...

  6. swift 上的 lazy

    lazy顾名思义就是慢吞吞的,万非得一就不动. 那么一个变量也是如此,只有你第一次使用的时候才进去加载.所有又称为延迟加载,需要的时候才加载. ========= 这样做的好处: 1. 模块化,把对象 ...

  7. AngularJS学习篇(二)

    AngularJS 指令 AngularJS 通过被称为 指令 的新属性来扩展 HTML. AngularJS 通过内置的指令来为应用添加功能. AngularJS 允许你自定义指令. Angular ...

  8. JsDoc脚本注释文档生成

    使用jsDoc可使用特定注释,将注释的内容生成文档,可用于生成脚本库的API文档 jsdoc 文档:   http://usejsdoc.org/

  9. Fiddler手机抓包图文教程

    上篇Fiddler教程,我们教了大家Fiddler安装配置及如何使用Fiddler进行基本的Http抓包及模拟请求,今天给大家介绍下如何使用Fiddler进行手机抓包. 运行环境为Windows 10 ...

  10. 详细图解window环境mongodb下载、安装、配置与使用

    到官网下载最新版面mongodb安装包,(32位版本的已经取消了,只有64位的) 官网地址: https://www.mongodb.com/download-center#community 下载完 ...