快速排序Golang版本
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版本的更多相关文章
- 基于visual Studio2013解决算法导论之009快速排序随机版本
题目 快速排序随机版本 解决代码及点评 #include <stdio.h> #include <stdlib.h> #include <malloc.h> ...
- 上传golang 版本SDK
在上传的时候,文件都上传成功了,但是返回的信息里面errcode 404 token 是"".是不是因为我的callbackUrl(随便写的) 写错导致的. 上传golang 版本 ...
- Golang版本的rocksdb-对gorocksdb的封装
rocksdb的优秀特性不用多说,但是它是用c++语言写的,就是这一个特点就把很多人拦住了.虽然rocksdb官方也有Java版本,但是Golang的发展速度让人不容小觑,而且由于golang原生对高 ...
- Golang 版本发布 与 TIOBE 排名
2016年国庆节(10月1日)开始接触 Go 语言,记录一下它的 版本发布 与 TIOBE 排名: Golang 排行榜 月份 版本 排名 备注 2012.03 1.0 201 ...
- 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 ...
- 面试经典算法:快速排序Golang实现
Golang快速排序 定义 快速排序由C. A. R. Hoare在1962年提出.快速排序是对冒泡排序的一种改进,采用了一种分治的策略. 基本思想 通过一趟排序将要排序的数据分割成独立的两部分,其中 ...
- [原创] linux 下上传 datapoint数据到yeelink 【golang版本】同时上传2个数据点
/* Create by sndnvaps<sndnvaps@gmail.com> * data: 2015-04-12* upload 2 datapoint to yeelink.ne ...
- golang 版本 gearman 试用
g2 是golang 版的gearman 实现,包含了server (支持leveldb,以及metrics).client 代码.worker 代码 使用上还是很方便的,同时部署也比较简单,结合do ...
- EasyDarwin开源流媒体服务器Golang版本:服务端录像功能发布
EasyDarwin开源流媒体服务器(www.easydarwin.org)现在使用Go版本实现了.最新的代码提交,已经支持了推流(或者拉流)的同时进行本地存储. 本地存储的原理,是在推流的同时启动f ...
随机推荐
- 赋值运算符函数__from <剑指Offer>
前段时间忙于项目,难得偷得几日闲,为即将到来的就业季做准备.在面试时,应聘者要注意多和考官交流,只有具备良好的沟通能力,才能充分了解面试官的需求,从而有针对性地选择算法解决问题. 题目来源于<剑 ...
- java字串加密
字串加密 1.设计思想: (1)加密方法,字符串的每一个字符都代表这个字符往后的第三位,最后三个字符代表,开始的三个字符. (2)解密方法,字符串的每一个字符都代表这个字符往前的第三位,开始三个字符代 ...
- 我的第一个python web开发框架(12)——工具函数包说明(三)
mail_helper.py是邮件操作包,用来发送邮件的. #!/usr/bin/evn python # coding=utf-8 import smtplib from email.mime.te ...
- Linux下MySQL5.7.19
第一次在自己虚机上安装mysql 中间碰到很多问题 在这里记下来,分享一下. linux centOS 6 mysql版本 mysql-5.7.19-linux-glibc2.12-x86_64.ta ...
- [Bayesian] “我是bayesian我怕谁”系列 - Latent Variables
下一章有意讲讲EM和变分推断的内容. EM和变分推断的内容能Google到很多,虽然质量乘次不齐,但本文也无意再赘述那么些个细节. 此处记录一些核心思想,帮助菜鸡形成整体上的认识.不过,变分推断也不是 ...
- HDU1255覆盖的面积
覆盖的面积 Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submis ...
- Strange fuction
Strange fuction Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tot ...
- 刘强1109 JavaScript基础二(分支与循环结构)
[if-else结构] 1.结构的写法: if(判断条件){ 条件为true时,执行if{} } else{ 条件为false时,执行else{} } 2.注意事项: ① else{}语句块,可以根据 ...
- html5页面实现点击复制功能
在实际工作中,有时候会遇到这样的需求,页面上有一个链接,不需要选中链接内容,只需要点击复制按钮,就可以把链接内容复制到剪切板.这时候可以使用clipboard插件来实现.以下是一个简单的demo. 首 ...
- Flex布局语法
flexbox 弹性盒布局和布局原理 新版的flexbox规范分两部分:一部分是container,一部分是 items. flexbox是一整套布局规范,包含了多个css属性,所以学习起来比`flo ...