// 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语言排序算法实现的更多相关文章

  1. C语言排序算法之简单交换法排序,直接选择排序,冒泡排序

    C语言排序算法之简单交换法排序,直接选择排序,冒泡排序,最近考试要用到,网上也有很多例子,我觉得还是自己写的看得懂一些. 简单交换法排序 /*简单交换法排序 根据序列中两个记录键值的比较结果来对换这两 ...

  2. C语言排序算法复习

    排序算法有很多种,这里在复习和分析的基础上,做一个自己的总结: 首先要知道有哪些排序算法,google一下,有云C语言7大经典排序算法(也有8大).主要包括冒泡排序,快速排序,选择排序,插入排序,希尔 ...

  3. C语言排序算法学习笔记——插入类排序

    排序就是讲原本无序的序列重新排序成有序的序列.序列里可以是一个单独数据,也可以是多个数据组合的记录,按照记录里的主关键字或者次关键字进行排序. 排序的稳定性:如果排序表中有两个元素R1,R2,其对应的 ...

  4. C语言 排序算法

    冒泡排序 冒泡排序(英语:Bubble Sort)是一种简单的排序算法.它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序(如从大到小.首字母从A到Z)错误就把他们交换过来. 过程演示: 选 ...

  5. c语言排序算法总结

    一.希尔(Shell)排序法 /* Shell 排序法 */ #include <stdio.h> void sort(int v[],int n) {      int gap,i,j, ...

  6. C语言排序算法学习笔记——交换类排序

    交换类排序:根据序列中两个元素关键字的比较结果来交换他俩在序列中的位置. 冒泡排序:假设待排序表长为n,从后往前(或从前往后)两两比较相邻元素的值,若为逆序(即A[i-1]>A[i])则交换他们 ...

  7. 两种常用的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 ...

  8. C语言排序算法

    (1)“冒泡法” 冒泡法大家都较熟悉.其原理为从a[0]开始,依次将其和后面的元素比较,若a[0]>a[i],则交换它们,一直比较到a[n].同理对a[1],a[2],...a[n-1]处理,即 ...

  9. C语言排序算法学习笔记——选择类排序

    选择排序:每一趟(例如第i趟)在后面n-i+1(i=1,2,3,……,n-1)个待排序元素中选取关键字最小的元素,作为有序子序列的第i个元素,直到n-1趟做完,待排序元素只剩下1个,就不用再选了. 简 ...

  10. C语言 排序算法总结

    #include<stdio.h> #include<stdlib.h> //作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ # ...

随机推荐

  1. 解决centos中vsftpd中文乱码

    系统环境 [root@augusite yum.repos.d]# cat /etc/redhat-release CentOS Linux release 7.2.1511 (Core) 软件版本 ...

  2. Codeforces 594D REQ 线段树

    REQ 把询问离线, 我们从n 到 1遍历过去的时候, 把(1 - 1 / p)乘在最靠近当前位置的地方, 然后区间求乘积就好啦. #include<bits/stdc++.h> #def ...

  3. websocket/dwebsocket 实现前后端的实时通信

    1.  用bottle框架,自己写一个服务端实现: 转载   :http://www.linuxyw.com/813.html 功能:用websocket技术,在运维工具的浏览器上实时显示远程服务器上 ...

  4. Calendar抽象类的使用

    Calendar timeNow = Calendar.getInstance(); int year = timeNow.get(Calendar.YEAR); // 这里月是从0开始的,即0到11 ...

  5. react部署

    https://www.cnblogs.com/jackson-zhangjiang/p/10095892.html React项目搭建与部署   React项目搭建与部署 一,介绍与需求 1.1,介 ...

  6. oracle的DBMS_JOB相关知识

    http://langgufu.iteye.com/blog/1179235 查看当前定时任务 select job,next_date,next_sec,failures,broken from u ...

  7. java.io.File中字段的使用

    File.pathSeparator指的是分隔连续多个路径字符串的分隔符,例如:Java   -cp   test.jar;abc.jar   HelloWorld就是指“;” File.separa ...

  8. oracle左连接连表查询

    要想把该表的数据全部查出来,必须select中出现该表的字段. SELECT distinct a.ZGSWSKFJ_DM,b.ZGSWJ_DM,b.SSGLY_DM,b.NSRSBH,b.NSRMC ...

  9. 如何找到fastjson.jar这个阿里开源的jar包

    如何找到fastjson.jar这个阿里开源的jar包 转载 https://blog.csdn.net/AngelLover2017/article/details/84261261 Java编程中 ...

  10. boost 正则表达式 regex

    boost 正则表达式 regex   环境安装 如果在引用boost regex出现连接错误,但是引用其他的库却没有这个错误,这是因为对于boost来说,是免编译的,但是,正则这个库 是需要单独编译 ...