冒泡(bubblesort)、选择排序、插入排序、快速排序
冒泡排序(bubblesort)
特点:通过换位置的方式,一直向上冒泡
package main
import "fmt"
func bubbleSortAsc(arrayA []int){
    for i:=0; i < len(arrayA); i++ {
    	for j:=0; j < len(arrayA)-1-i; j++ {
    		if arrayA[j] > arrayA[j+1]{
        		arrayA[j], arrayA[j+1] = arrayA[j+1], arrayA[j]
			}
    	}
    }
    fmt.Println(arrayA)
}
func bubbleSortDesc(arrayA []int){
	for i:=0; i < len(arrayA); i++{
		for j:=0; j < len(arrayA)-1-i; j++{
			if arrayA[j] < arrayA[j+1]{
				arrayA[j], arrayA[j+1] = arrayA[j+1], arrayA[j]
			}
		}
	}
	fmt.Println(arrayA)
}
func main(){
	var arrayA []int = []int{1,3,5,2,9,10,6,4,8,7}
	bubbleSortAsc(arrayA)
	bubbleSortDesc(arrayA)
}
快速排序(quicksort)
基本思想:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分都要小,然后再按此方法对两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列
复杂度:快速排序是最不稳定的算法,最坏的时间复杂度是O(n2),最好的时间复杂度是 nlogn,空间复杂度是O(logn)
demo:
package main
import "fmt"
func QuickSort(aSlice []int, start, end int) {
	if start >= end {
		return
	}
	var low, high = start, end  //low 为由左向右的游标, high为由右向左的游标
	var mid = aSlice[start]  // 基数
	for low < high {
		//如果 low 与 high 未重合,high指向的元素不比基准元素小,则high往左移动
		for low < high && aSlice[high] >= mid {
			high--
		}
		aSlice[low] = aSlice[high]
		//如果 low 与 high 未重合,low指向的元素不比基准元素小,则low往右移动
		for low < high && aSlice[low] < mid {
			low ++
		}
		aSlice[high] = aSlice[low]
	}
	//将基准元素放到该位置
	aSlice[low] = mid
	//对基准元素左边的子序列进行快速排序
	QuickSort(aSlice, start, low - 1)
	//对基准元素右边的子序列进行快速排序
	QuickSort(aSlice, low + 1, end)
}
func main (){
	var aSlice = []int{2,5,4,6,9,8,10,1,3,7}
	QuickSort(aSlice, 0, len(aSlice) - 1)
	fmt.Println(aSlice)
}
python 版本:
# coding: utf8 def quick_sort(alist, start, end):
if start >= end:
return # low为由左向右的游标, high为由右向左的游标
low = start
high = end
mid = alist[start] # 基数 while low < high:
# 如果 low 与 high 未重合,high指向的元素不比基准元素小,则high往左移动
while low < high and alist[high] >= mid:
high -= 1
alist[low] = alist[high] # 如果 low 与 high 未重合,low指向的元素不比基准元素小,则low往右移动
while low < high and alist[low] < mid:
low += 1
alist[high] = alist[low] # 将基准元素放到该位置
alist[low] = mid
# 对基准元素左边的子序列进行快速排序
quick_sort(alist, start, low - 1)
# 对基准元素右边的子序列进行快速排序
quick_sort(alist, low + 1, end) if __name__ == '__main__':
# alist = [2, 5, 4, 6, 9, 7, 8, 1, 10, 3]
alist = [6, 5, 8, 2, 9, 4, 10, 1, 3, 7]
quick_sort(alist, 0, len(alist) - 1)
print(alist)
插入排序(insertsort)
像打扑克牌时的抓牌,第一张牌是不需要插入的,第二张牌开始就需要插入了,根据习惯,这里是从右往左看,小的一直往左边挪,一旦确认位置就退出循环(去抓下一张牌)
package main
import "fmt"
func insertSortAsc(arrayA []int){
    for i:=1; i < len(arrayA); i++ {
    	for j:=i; j > 0; j-- {
    		fmt.Println(arrayA[j])
    		if arrayA[j-1] > arrayA[j]{
        		arrayA[j-1], arrayA[j] = arrayA[j], arrayA[j-1]
			} else {
				break
			}
    	}
    }
    fmt.Println(arrayA)
}
func insertSortDesc(arrayA []int){
	for i:=1; i < len(arrayA); i++{
		for j:=i; j > 0; j--{
			if arrayA[j-1] < arrayA[j]{
				arrayA[j-1], arrayA[j] = arrayA[j], arrayA[j-1]
			} else {
				break
			}
		}
	}
	fmt.Println(arrayA)
}
func main(){
	var arrayA []int = []int{3,1,5,2,9,10,6,4,8,7}
	insertSortAsc(arrayA)
	insertSortDesc(arrayA)
}
冒泡(bubblesort)、选择排序、插入排序、快速排序的更多相关文章
- Python学习之---冒泡,选择,插入排序
		
Python学习之---冒泡,选择,插入排序 最近学习了python基础,写一下3大排序练练手: 1 ''' 2 Created on 2013-8-23 3 4 @author: codegeek ...
 - 学习C#之旅 冒泡排序,选择排序,插入排序,希尔排序[资料收集]
		
关于冒泡排序,选择排序,插入排序,希尔排序[资料收集] 以下资料来源与网络 冒泡排序:从后到前(或者从前到后)相邻的两个两两进行比较,不满足要求就位置进行交换,一轮下来选择出一个最小(或最大)的放到 ...
 - 基于python语言的经典排序法(冒泡法和选择排序法)
		
前 每逢周末就遇雨期,闲暇之余,捣鼓了下python,心心念想学习,今天就在电脑上装了个2.7,学习了下经典算法,冒泡与选择排序法 第一次写关于python的文章,说的不当之处,多多指正,我积极改正 ...
 - python算法(一)基本知识&冒泡排序&选择排序&插入排序
		
本节内容: 算法基本知识 冒泡排序 选择排序 插入排序 1. 算法基本知识 1.1 什么是算法? 算法(algorithm):就是定义良好的计算过程,他取一个或一组的值为输入,并产生出一个或一组值作为 ...
 - 数组排序-冒泡排序-选择排序-插入排序-希尔排序-快速排序-Java实现
		
这五种排序算法难度依次增加. 冒泡排序: 第一次将数组相邻两个元素依次比较,然后将大的元素往后移,像冒泡一样,最终最大的元素被移到数组的最末尾. 第二次将数组的前n-1个元素取出,然后相邻两个元素依次 ...
 - Javascript中的冒泡排序,插入排序,选择排序,快速排序,归并排序,堆排序  算法性能分析
		
阿里面试中有一道题是这样的: 请用JavaScript语言实现 sort 排序函数,要求:sort([5, 100, 6, 3, -12]) // 返回 [-12, 3, 5, 6, 100],如果你 ...
 - 第四篇、C_快速、冒泡、选择、插入排序、二分查找排序、归并、堆排序
		
1.快速排序 实现: 1.取中间一个数作为支点 2.分别在支点的左右两边进行查找,如果左边查找到比支点大,右边查找到比支点小,就交换位置,如此循环,比支点小的数就排在了左边,比支点大的就排在右边 3. ...
 - 算法分析中最常用的几种排序算法(插入排序、希尔排序、冒泡排序、选择排序、快速排序,归并排序)C 语言版
		
每次开始动手写算法,都是先把插入排序,冒泡排序写一遍,十次有九次是重复的,所以这次下定决心,将所有常规的排序算法写了一遍,以便日后熟悉. 以下代码总用一个main函数和一个自定义的CommonFunc ...
 - 几种排序方式的java实现(01:插入排序,冒泡排序,选择排序,快速排序)
		
以下为集中排序的java代码实现(部分是在引用别人代码): 插入排序(InsertSort): //代码原理 public static void iSort(int[] a){ for(int i ...
 - php基础排序算法 冒泡排序 选择排序 插入排序 归并排序 快速排序
		
<?php$arr=array(12,25,56,1,75,13,58,99,22);//冒泡排序function sortnum($arr){ $num=count($arr); ...
 
随机推荐
- 批量转换Excel转CSV文件
			
本文为Excel VBA代码,可以实现将某一文件夹内的Excel文件(xls或者xlsx)另存为“逗号分隔的csv文件”. 使用条件: 1. Windows系统: 2. 已安装 MS 2007或以 ...
 - PS 实用技巧
			
1. 调整大小 ctrl + T 2. 导出透明背景图片 选择 png格式
 - svn add 命令 递归目录下所有文件
			
svn add 命令 递归目录下所有文件 摘自:https://blog.csdn.net/yefl007/article/details/46506281 即使被忽略了也可以使用此命令. svn a ...
 - LeetCode_171. Excel Sheet Column Number
			
171. Excel Sheet Column Number Easy Given a column title as appear in an Excel sheet, return its cor ...
 - python迭代器、生成器、装饰器之迭代器
			
迭代是Python最强大的功能之一,是访问集合元素的一种方式. 一般分为可迭代对象,迭代器,可迭代对象不一定是迭代器,但迭代器一定是可迭代对象 1.可以直接作用于for循环的数据类型 第一类:集合数据 ...
 - SmartCode
			
SmartCode(https://github.com/Ahoo-Wang/SmartCode) SmartCode = IDataSource -> IBuildTask -> IOu ...
 - 【c# 学习笔记】封装
			
封装 指的是把类内部的数据隐藏起来,不让对象实例直接对其操作.c#中提供了属性机制来对类内部的状态进行操作. 在c#中,封装可以通过Public.Private.Protected和Internal等 ...
 - charles 高级批量请求
			
本文参考:charles 高级批量请求 这个我感觉有点鸡肋,真正的批量请求,推荐使用JMter charles 高级批量请求就是下面这种简单的设置的 简单的使用还是可以的; 比如简单的测试下,向某一个 ...
 - 图像Resize中0.5像素中心对齐的问题
			
目录 0.5像素对齐的问题 0.5像素对齐的问题 1. 问题提出 在进行图像缩放时,偶尔会看到一些比较奇怪的代码,其中有一个就是0.5像素中心对齐的问题,例如在OpenCV线性插值的代码中有类似如下操 ...
 - Spring + Atomikos 分布式事务实现方式
			
不同的数据库一定要分包建立 引用:http://blog.csdn.net/benluobobo/article/details/49818017 http://blog.csdn.net/yds49 ...