Go实现常用的排序算法
一、插入排序
1.从第一个元素开始,该元素可以认为已经被排序
2.取出下一个元素,在已经排序的元素序列中从后向前扫描
3.如果该元素(已排序)大于新元素,将该元素移到下一位置
4.重复步骤3,直到找到已排序的元素小于或者等于新元素的位置
5.将新元素插入到该位置后
点击查看代码
// 插入排序
func insertsort(arr []int) []int {
//循环多少次,需要插入n-1个,从第二个开始插
for i:=1; i<len(arr) ; i++ {
num := arr[i]
//j是已经排好需要,为什么是i-1,因为需要在已经排好的数据里面插入,要找到插入的位置
j:=i-1
//内嵌循环,如果比需要插入数据大就先往后排。
for j>=0&&arr[j]>num {
arr[j+1] = arr[j]
j--
}
//插入
arr[j+1] = num
}
return arr
}
二、冒泡排序
1.比较相邻的元素,如果第一个比第二个大,就交换他们两个
2.对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对,这步做完后,最后的元素会是最大的数。
3.核心就是需要冒泡n-1次,因为每次冒泡筛出一个最大值。
点击查看代码
func bubbleSort(arr []int) []int {
//外嵌套循环次数为n-1
n := len(arr)
for i:=0;i<n-1;i++{
//内嵌循环,进行两两对比,对比n-1-i次,因为
for j:=0 ; j<n-1-i;j++ {
if arr[j]>arr[j+1]{
//交换位置
arr[j],arr[j+1] = arr[j+1], arr[j]
}
}
}
}
三。快速排序
1.不需要排的条件是数组为【】或者只有一个元素,这叫做基线条件。
2.选择一个基准元素provit,作为对数组分区的基准
3.将数组进行分区,比provit大的在right组,小的在left组
4.分治思想对左和右数组进行快速排序。
点击查看代码
func QuickSort(arr []int) []int {
//基线条件
n:=len(arr)
if n<2 {
return arr
}
//基准元素
provit := arr[0]
//分区
var left, right []int
for _,v := range arr[1:] {
if v <=provit {
left=append(left,v)
}else {
right = append(right, v)
}
}
//快速排序
left = QuickSort(left)
right =QuickSort(right)
return append(append(left,provit),right...)
}
Go实现常用的排序算法的更多相关文章
- JavaScript实现常用的排序算法
▓▓▓▓▓▓ 大致介绍 由于最近要考试复习,所以学习js的时间少了 -_-||,考试完还会继续的努力学习,这次用原生的JavaScript实现以前学习的常用的排序算法,有冒泡排序.快速排序.直接插入排 ...
- 常用Java排序算法
常用Java排序算法 冒泡排序 .选择排序.快速排序 package com.javaee.corejava; public class DataSort { public DataSort() { ...
- java SE 常用的排序算法
java程序员会用到的经典排序算法实现 常用的排序算法(以下代码包含的)有以下五类: A.插入排序(直接插入排序.希尔排序) B.交换排序(冒泡排序.快速排序) C.选择排序(直接选择排序.堆排序) ...
- C#中常用的排序算法的时间复杂度和空间复杂度
常用的排序算法的时间复杂度和空间复杂度 常用的排序算法的时间复杂度和空间复杂度 排序法 最差时间分析 平均时间复杂度 稳定度 空间复杂度 冒泡排序 O(n2) O(n2) 稳定 O(1) 快速排序 ...
- 数据结构中常用的排序算法 && 时间复杂度 && 空间复杂度
第一部分:数据结构中常用的排序算法 数据结构中的排序算法一般包括冒泡排序.选择排序.插入排序.归并排序和 快速排序, 当然还有很多其他的排序方式,这里主要介绍这五种排序方式. 排序是数据结构中的主要内 ...
- 常用的排序算法介绍和在JAVA的实现(二)
一.写随笔的原因:本文接上次的常用的排序算法介绍和在JAVA的实现(一) 二.具体的内容: 3.交换排序 交换排序:通过交换元素之间的位置来实现排序. 交换排序又可细分为:冒泡排序,快速排序 (1)冒 ...
- 排序总结---常用的排序算法总结,java和js实现
这篇博客对几种常见的排序算法进行归纳总结,在接下来的博客中会依次给出每个排序算法的例子 [由于博客上面进行编辑不太方便,图表都是在电脑上编辑好,上传的图片] 1.排序的分类 2.几种内部排序方法的比较 ...
- 常用的排序算法介绍和在JAVA的实现(一)
一.写随笔的原因:排序比较常用,借此文介绍下排序常用的算法及实现,借此来MARK一下,方便以后的复习.(本人总是忘得比较快) 二.具体的内容: 1.插入排序 插入排序:在前面已经排好序的序列中找到合适 ...
- 五种C语言非数值计算的常用经典排序算法
摘要:排序是计算机的一种操作方法,其目的是将一组"无序"的记录序列调整为"有序"的记录序列,主要分为内部排序和外部排序. 排序 排序是计算机的一种操作方法,其目 ...
- C语言几种常用的排序算法
/* ============================================================================= 相关知识介绍(所有定义只为帮助读者理解 ...
随机推荐
- python执行shell并获取结果
在Python中执行Shell命令并获取其结果,通常可以使用subprocess模块.这个模块允许我们启动新的进程,连接到它们的输入/输出/错误管道,并获取它们的返回码.下面是一个详细的示例,展示了如 ...
- 火山引擎数智平台赋能火花思维,A/B测试加速创新
更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群. 在数字化浪潮下,火花思维凭借其对数据驱动的理解与实践,搭上了业务快速增长的快车.这一效果的背后,离不开火花思 ...
- 将mysql的查询结果保存到文件中,并将文件从内网下载到外网服务器
方法一: 直接执行命令: mysql> SELECT ordersid from yws.callback_clockd ORDER BY ordersid ASC limit 0,10000 ...
- 学习笔记--Java中final关键字
Java中final关键字 关于Java语言中的final关键字: final是一个关键字,表示:最终的,不可改变 final修饰的类无法被继承 final修饰的方法无法被覆盖 final修饰的变量一 ...
- vue加载三维模型
创建项目 我使用的是Vue CLI3,具体创建不再赘述,网上教程很多 下载SuperMap iClient3D for WebGL产品包 链接:http://support.supermap.com. ...
- 实现一个终端文本编辑器来学习golang语言:第二章Raw模式下的输入输出
从第二章开始,在每个小节的最后都会有一些代码实操作业,你可以选择自己完成(比较推荐),再对照我的实现方式,当然也可以直接看我的代码实现.不过,之后的各个功能实现,我都会基于我先前的代码实现版本,在它的 ...
- 树莓派3B+ 安装开源软路由 openwrt 并设置 无线网桥
在openwrt官网上找到最新版的下载地址: https://openwrt.org/releases/19.07/start 注: 本文中使用的openwrt 系统为最新的稳定版系统,自带web ...
- 如何实现nvidia显卡的cuda的多kernel并发执行???
相关: CPU端多进程/多线程调用CUDA是否可以加速??? 参考: <CUDA C 编程指南>导读 https://developer.nvidia.com/blog/gpu-pro-t ...
- vue之父组件与子组件
1.背景 2.简单使用 <!DOCTYPE html> <html lang="en"> <head> <meta charset=&qu ...
- CF208E 题解
Blood Cousins 前置知识:线段树合并. 我们先把题目转化一下.这里先设 \(v\) 的 \(p\) 级祖先为 \(u\),事实上要求的东西就是 \(u\) 的 \(p\) 级后代的个数减 ...