// 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. JMeter中BeanShell Sampler调试分享

    BeanShell脚本 String s = "s"; String y = "y"; boolean result = s.equals(y); vars.p ...

  2. Flink--将表转换为DataStream或DataSet

    A Table可以转换成a DataStream或DataSet.通过这种方式,可以在Table API或SQL查询的结果上运行自定义的DataStream或DataSet程序 将表转换为DataSt ...

  3. Python学习(十九) —— 前端基础之HTML

    转载自:http://www.cnblogs.com/liwenzhou/p/7988087.html 一.HTML介绍 1.Web服务本质 import socket sk = socket.soc ...

  4. bug管理

    BUG提交规范 1.标题 2.步骤描述 ①.步骤使用序号编排 ②.在特定情况下发生的问题,还需提供准确的前提条件 ③.精准的描述bug产生的路径后,再描述现象 如: >打开客户端进行首页-> ...

  5. day28 面向对象:反射,内置函数,类的内置方法

    面向对象进阶博客地址链接: http://www.cnblogs.com/Eva-J/articles/7351812.html 复习昨日内容: # 包 # 开发规范 # # hashlib # 登录 ...

  6. Linux下的Mysql数据库备份+还原

    数据库备份: root@debian-mm:/home/debian-mm# mysqldump -u root -p Account > Account.sql Enter password: ...

  7. POJ2387 Til the Cows Come Home 【Dijkstra】

    题目链接:http://poj.org/problem?id=2387 题目大意; 题意:给出两个整数T,N,然后输入一些点直接的距离,求N和1之间的最短距离.. 思路:dijkstra求单源最短路, ...

  8. csrf技巧

    Burpsuite,在数据包处右键,Engagement tools – Generate CSRF PoC,可生成csrf payload

  9. Linux 系统分级及root权限相关

    单用户模式修改用户密码 救援模式 让我们先来了解一下linux的运行步骤 1. Linux系统引导的顺序掌握Linux系统引导的顺序:BIOSMBRKernelinit其中,BIOS的工作是检查计算机 ...

  10. XamarinSQLite教程Xamarin.Android项目添加引用

    XamarinSQLite教程Xamarin.Android项目添加引用 在Xamarin.Android项目中,导入System.Data和Mono.Data.SQLite库的操作步骤如下: (1) ...