Go语言排序算法实现
// Algorithm project Algorithm.go
package Algorithm // 冒泡排序
func BubbleSort(a []int) {
n := len(a)
for i := n; i > ; i-- {
for j := ; j < i-; j++ {
if a[j] > a[j+] {
a[j], a[j+] = a[j+], a[j]
}
}
}
} // 选择排序
func SelectSort(a []int) {
n := len(a)
for i := ; i < n-; i++ {
k := i
for j := i + ; j < n; j++ {
if a[j] < a[k] {
k = j
}
}
a[i], a[k] = a[k], a[i]
}
} // 插入排序
func InsertionSort(a []int) {
n := len(a)
for i := ; i < n; i++ {
temp := a[i]
j := i -
for ; j >= && a[j] > temp; j-- {
a[j+] = a[j]
}
a[j+] = temp
}
} // 希尔排序
func ShellSort(a []int) {
n := len(a)
for d := n / ; d >= ; d /= {
for i := d; i < n; i++ {
temp := a[i]
j := i - d
for ; j >= && a[j] > temp; j -= d {
a[j+d] = a[j]
}
a[j+d] = temp
}
}
} // 快速排序的一次划分
func partition(a []int, s int, e int) int {
temp := a[s]
i := s
j := e
for i < j {
for i < j && a[j] > temp {
j--
}
if i < j {
a[i] = a[j]
i++
}
for i < j && a[i] < temp {
i++
}
if i < j {
a[j] = a[i]
j--
}
}
a[i] = temp
return i
} // 快速排序
func QuickSort(a []int, s int, e int) {
if s >= e {
return
}
i := partition(a, s, e)
QuickSort(a, s, i-)
QuickSort(a, i+, e)
} // 堆排序
func HeapSort(a []int) {
n := len(a)
// 建堆
for i := n/ - ; i >= ; i-- {
k := i
for *k+ < n {
j := *k +
if j+ < n && a[j] < a[j+] {
j++
}
if a[j] > a[k] {
a[k], a[j] = a[j], a[k]
k = j
} else {
break
}
}
}
// 调整堆
for i := n - ; i > ; i-- {
a[], a[i] = a[i], a[]
k :=
for *k+ < i {
j := *k +
if j+ < i && a[j] < a[j+] {
j++
}
if a[j] > a[k] {
a[k], a[j] = a[j], a[k]
k = j
} else {
break
}
}
}
} // 合并一次
func mergeOne(a []int, b []int, n int, len int) {
i :=
for i+len < n {
j := i + *len -
if j >= n {
j = n -
}
m := i
k := i
l := i + len
for i < k+len && l <= j {
if a[i] <= a[l] {
b[m] = a[i]
m++
i++
} else {
b[m] = a[l]
m++
l++
}
}
for i < k+len {
b[m] = a[i]
m++
i++
}
for l <= j {
b[m] = a[l]
m++
l++
}
i = j +
}
if i < n {
for ; i < n; i++ {
b[i] = a[i]
}
}
} // 归并排序
func MergeSort(a []int) {
n := len(a)
b := make([]int, n)
len :=
flag :=
for len < n {
if flag == {
mergeOne(a, b, n, len)
}
if flag == {
mergeOne(b, a, n, len)
}
flag = - flag
len *=
}
if flag == {
for i := ; i < n; i++ {
a[i] = b[i]
}
}
}
github链接地址:https://github.com/gaopeng527/go_Algorithm/blob/master/sort.go
Go语言排序算法实现的更多相关文章
- C语言排序算法之简单交换法排序,直接选择排序,冒泡排序
C语言排序算法之简单交换法排序,直接选择排序,冒泡排序,最近考试要用到,网上也有很多例子,我觉得还是自己写的看得懂一些. 简单交换法排序 /*简单交换法排序 根据序列中两个记录键值的比较结果来对换这两 ...
- C语言排序算法复习
排序算法有很多种,这里在复习和分析的基础上,做一个自己的总结: 首先要知道有哪些排序算法,google一下,有云C语言7大经典排序算法(也有8大).主要包括冒泡排序,快速排序,选择排序,插入排序,希尔 ...
- C语言排序算法学习笔记——插入类排序
排序就是讲原本无序的序列重新排序成有序的序列.序列里可以是一个单独数据,也可以是多个数据组合的记录,按照记录里的主关键字或者次关键字进行排序. 排序的稳定性:如果排序表中有两个元素R1,R2,其对应的 ...
- C语言 排序算法
冒泡排序 冒泡排序(英语:Bubble Sort)是一种简单的排序算法.它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序(如从大到小.首字母从A到Z)错误就把他们交换过来. 过程演示: 选 ...
- c语言排序算法总结
一.希尔(Shell)排序法 /* Shell 排序法 */ #include <stdio.h> void sort(int v[],int n) { int gap,i,j, ...
- C语言排序算法学习笔记——交换类排序
交换类排序:根据序列中两个元素关键字的比较结果来交换他俩在序列中的位置. 冒泡排序:假设待排序表长为n,从后往前(或从前往后)两两比较相邻元素的值,若为逆序(即A[i-1]>A[i])则交换他们 ...
- 两种常用的C语言排序算法
1. 要求输入10个整数,从大到小排序输出 输入:2 0 3 -4 8 9 5 1 7 6 输出:9 8 7 6 5 3 2 1 0 -4 解决方法:选择排序法 实现代码如下: #include &l ...
- C语言排序算法
(1)“冒泡法” 冒泡法大家都较熟悉.其原理为从a[0]开始,依次将其和后面的元素比较,若a[0]>a[i],则交换它们,一直比较到a[n].同理对a[1],a[2],...a[n-1]处理,即 ...
- C语言排序算法学习笔记——选择类排序
选择排序:每一趟(例如第i趟)在后面n-i+1(i=1,2,3,……,n-1)个待排序元素中选取关键字最小的元素,作为有序子序列的第i个元素,直到n-1趟做完,待排序元素只剩下1个,就不用再选了. 简 ...
- C语言 排序算法总结
#include<stdio.h> #include<stdlib.h> //作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ # ...
随机推荐
- HTTP.sys远程执行代码漏洞
远程执行代码漏洞存在于 HTTP 协议堆栈 (HTTP.sys) 中,当 HTTP.sys 未正确分析经特殊设计的 HTTP 请求时会导致此漏洞. http://bbs.safedog.cn/thre ...
- java 防止xss攻击
http://blog.csdn.net/zhengbo0/article/details/40507519 http://blog.csdn.net/ghsau/article/details/17 ...
- HDU 3415 Max Sum of Max-K-sub-sequence【单调队列】
<题目链接> 题目大意: 给你一段从1~N的圆形序列,要你求出这段圆形序列中长度不超过K的最大连续子序列之和是多少,并且输出这子序列的起点和终点. 解题分析: 既然是求连续子序列之和,我们 ...
- linux 学习笔记四
文件权限管理篇章 chown -R mysql. /usr/local 把 /usr/local/以及以下的所有文件和子目录属主改为 mysql ls -al * 用这条命令查询 chgrp c ...
- Linux安装Elasticsearch
本文介绍Linux环境如何安装Elasticsearch. 本文环境是在腾讯云服务器CentOS7.2搭建的,JDK1.8,elasticsearch-5.4.2. 1 安装JDK 网上教程很多,也可 ...
- IIS 注册 ASP.NET 2.0 4.0
在CMD窗体,运行如下命令: 2.0:C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis.exe -i 4.0:C:\WINDOWS ...
- 双11线上压测netty内存泄露
最近线上压测,机器学习模型第一次应用到线上经历双11大促.JSF微服务有报错 LEAK: ByteBuf.release() was not called before it's garbage-co ...
- BZOJ2821 作诗(Poetize) 分块
题意 算法 经验总结 代码 题意 不带修改,查询数列[1,n]中[l,r]内的出现正偶数次的数的个数, 数列中的数 <= 1e5, n <= 1e5, 强制在线 算法 查询的内容: 区 ...
- 157. [USACO Nov07] 奶牛跨栏
157. [USACO Nov07] 奶牛跨栏(点击转到COGS) 输入文件:hurdles.in 输出文件:hurdles.out 时间限制:1 s 内存限制:128 MB 译 by CmY ...
- 洛谷.3805.[模板]manacher算法
题目链接 之前做很早了没写这篇,补上. 记录当前ex[]最大的回文中心id和最远延伸范围mx! 关于串的构造: 应该是 @ #A#B#C#B#A# $ ,而不是 @ A#B#C#B#A $ 比如 @a ...