使用golang学习算法(1)-排序

前言

终于感觉到算法的重要了。于是打算继续学习下。

其实算法跟语言没有啥关系,用啥语言都可以实现关键是思路,最近正好在学习golang。打算把算法的编写使用golang完成。

没有使用IDE,使用的是sublime2+ golang的插件,然后使用命令行进行编译。

开发效率也不低,也支持语言的自动补齐。

搭建环境【http://blog.csdn.net/freewebsys/article/details/17955255

学习的参数书,使用《算法导论》,也就是敲敲书上的代码学习下。

1,插入排序

package main

func InsertSort(a []int) {
	for j := 1; j < len(a); j++ {
		var key = a[j]
		var i = j - 1
		for ; i >= 0 && a[i] > key; i-- { //a[i] > key 是按照升序排列,a[i] < key 是按照降序排列。
			a[i+1] = a[i]
		}
		a[i+1] = key
		for _, v := range a {
			print(v, ",")
		}
		println()
	}
}

func main() {
	a := []int{5, 2, 4, 6, 1, 3}
	for _, v := range a {
		print(v, ",")
	}
	println()
	InsertSort(a)
}

运行结果:

	5,2,4,6,1,3,
	2,5,4,6,1,3,
	2,4,5,6,1,3,
	2,4,5,6,1,3,
	1,2,4,5,6,3,
	1,2,3,4,5,6,

总结:插入算法,从第二个元素开始循环整个数组,找到比当前元素小的i,然后交换数据。直到循环完全部数据。书上举的例子很形象,就像是给扑克牌排序。

2,冒泡排序

代码:

package main

func BubbleSort(a []int) {
	for i := 0; i <= len(a)-2; i++ {
		for j := len(a) - 1; j >= i+1; j-- {
			if a[j] < a[j-1] {
				a[j], a[j-1] = a[j-1], a[j] //数据交换
			}
		}
	}
}

func main() {
	a := []int{5, 2, 4, 6, 1, 3}
	for _, v := range a {
		print(v, ",")
	}
	println()
	BubbleSort(a)
	for _, v := range a {
		print(v, ",")
	}
	println()
}

运行结果:

5,2,4,6,1,3,
1,2,3,4,5,6,

总结:冒泡排序,从最后一个数据开始往前进行比较,如果小于前一个数据就交换数据。

时间: 2024-09-28 20:16:59

使用golang学习算法(1)-排序的相关文章

python算法学习之计数排序实例_python

python算法学习之计数排序实例 复制代码 代码如下: # -*- coding: utf-8 -*- def _counting_sort(A, B, k):    """计数排序,伪码如下:    COUNTING-SORT(A, B, k)    1  for i ← 0 to k // 初始化存储区的值    2    do C[i] ← 0    3  for j ← 1 to length[A] // 为各值计数    4    do C[A[j]] ← C[A

Medium网友开发了一款应用程序 让学习算法和数据结构变得更有趣

CS-Playground-React接口 CS-Playground-React地址:http://cs-playground-react.surge.sh/ Medium网友Peter Weinberg的自述:我是一名自学成才的程序员.我觉得自己做得不够好,并且在掌握复杂的计算机科学概念方面处于劣势. 我对数学不是十分擅长.我总是把强大的数学技巧和天生擅长编程的能力联系在了一起.我觉得我必须比其他人(他们有天生的数学能力)更努力地学习相同的概念.这个想法深深扎根在我的大脑中,我很确定我永远无

【重磅】AlphaZero炼成最强通用棋类AI,DeepMind强化学习算法8小时完爆人类棋类游戏

世界最强围棋AI AlphaGo Zero带给世人的震撼并没有想象中那么久--不是因为大家都去看谁(没)跟谁吃饭了,而是DeepMind再次迅速超越了他们自己,超越了我们剩下所有人的想象. 12月5日,距离发布AlphaGo Zero论文后不到两个月,他们在arXiv上传最新论文<用通用强化学习算法自我对弈,掌握国际象棋和将棋>(Mastering Chess and Shogi by Self-Play with a General Reinforcement Learning Algori

源代码-Q学习算法怎样用C++代码实现呢??

问题描述 Q学习算法怎样用C++代码实现呢?? Q学习算法怎样用C++代码实现呢??可以执行的源代码,,谢谢了,,技术小白 解决方案 RSA算法介绍及JAVA实现,其实java和c++差不多,参考一下吧 <一>基础 RSA算法非常简单,概述如下: 找两素数p和q 取n=p*q 取t=(p-1)*(q-1) 取任何一个数e,要求满足e<t并且e与t互素(就是最大公因数为1) 取d*e%t==1 这样最终得到三个数: n d e 设消息为数M (M <n) 设c=(M**d)%n就得到

【C/C++学院】0907-象棋五子棋代码分析/寻找算法以及排序算法

象棋五子棋代码分析 编译代码报错: 错误 1 error MSB8031: Building an MFC project for a non-Unicode character set is deprecated. You must change the project property to Unicode or download an additional library. See http://go.microsoft.com/fwlink/p/?LinkId=286820 for mo

深度学习算法可以去掉视频的缓冲轮,观看速度将变得更加流畅

当你在看视频的时候,不断地缓冲提示是不是让你感到很烦躁? 最近的一项研究表明,近70%的网络内容是流媒体视频和音频,流媒体是否需要缓冲,这一点比以往任何时候都更重要.幸运的是,麻省理工学院的研究人员正在用基于人工智能的流媒体算法开辟新的领域,这些算法可能会导致缓冲轮消失,让我们大胆地看到了视频流的未来. 在过去的5年里,视频流呈现爆炸式增长.像Netflix.亚马逊.谷歌这样的流媒体巨头都在为原创的和有版权的流媒体内容注入资源,试图从传统的电视网络中赢得观众.因此,越来越多的消费者放弃他们的高价

JavaScript实现十种经典排序算法(js排序算法)

 冒泡排序算法 冒泡排序(Bubble Sort)是一种简单直观的排序算法.冒泡排序算法的步骤描述如下: 比较相邻的元素.如果第一个比第二个大,就交换他们两个. 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对.这步做完后,最后的元素会是最大的数. 针对所有的元素重复以上的步骤,除了最后一个. 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较. JavaScript实现冒泡排序算法的代码如下: function bubbleSort(arr) {     var l

分布式深度学习算法产品及在蚂蚁金服中的应用

近日在北京刚刚举办的Strata + Hadoop World大会很有亮点.阿里云iDST褚崴在会上分享了<分布式深度学习算法产品及其在蚂蚁金服业务中的应用>.下为大数据文摘所做的整理文章. 近年来深度学习技术迅猛发展,在图像识别,语音交互,机器翻译等领域展现出了巨大的潜力.依托阿里云自主研发的分布式数据存储与计算服务ODPS,我们研发了机器学习平台产品PAI (platform of artificial intelligence),支持分布式的深度学习算法产品.在CPU和GPU混布计算集群

TensorFlow Agents日前开源,轻松在TF中构建并行强化学习算法

用于在TensorFlow中构建并行强化学习算法的高效基础架构范例TensorFlow Agents日前开源,这个项目是由谷歌的两位研究员James Davidson.Vincent Vanhoucke,以及Danijar Hafner共同研发的.关于这个项目的开源信息他们在GitHub上进行了介绍,雷锋网 AI 科技评论将内容进行编译整理. TensorFlow Agents TensorFlow Agents为强化学习提供了优化的基础架构,它将OpenAI gym接口扩展到多个并行环境,并能