四种排序算法与二分查找

1. 冒泡排序

func BubbleSort(slice []int) []int {
	i, j, okay, count := 0, 0, true, len(slice)
	for i = 0; i < count-1; i++ { //最多需要进行count-1轮比较
		okay = true
		for j = 0; j < count-i-1; j++ { //每一轮比较的逻辑
			if slice[j] > slice[j+1] {
				slice[j], slice[j+1] = slice[j+1], slice[j]
				okay = false
			}
		}
		if okay { //当轮比较没有发生位置交换,说明已经排序完成,可提前退出循环
			break
		}
	}
	return slice
}

 

2. 插入排序

func InsertSort(slice []int) []int {
	var i, j int
	count := len(slice)
	for i = 1; i < count; i++ {
		for j = i; j > 0; j-- { //通过比较,找插入位置
			if slice[j-1] > slice[j] {
				slice[j-1], slice[j] = slice[j], slice[j-1]
			} else { //当前元素已找到插入位置,退出循环
				break
			}
		}
	}
	return slice
}

  

3. 选择排序

func SelectSort(slice []int) []int {
	var i, j, minKey int
	count := len(slice)
	for i = 0; i < count-1; i++ {
		minKey = i
		for j = i + 1; j < count; j++ { //找最小数位置
			if slice[minKey] > slice[j] {
				minKey = j
			}
		}
		if minKey != i {
			slice[minKey], slice[i] = slice[i], slice[minKey]
		}
	}
	return slice
}

  

4. 快速排序

func QuickSort(slice []int, start, end int) {
	if start >= end {
		return
	}
	i, j := start, end
	val := slice[(i+j)/2]
	for i <= j {
		for i <= end && slice[i] < val {
			i++
		}
		for j >= start && slice[j] > val {
			j--
		}
		if i <= j {
			slice[i], slice[j] = slice[j], slice[i]
			i++
			j--
		}
	}

	if start < j {
		QuickSort(slice, start, j)
	}
	if end > i {
		QuickSort(slice, i, end)
	}
}

  

5. 二分查找

func BinarySearch(slice []int, head, tail, value int) int {
	if head > tail {
		return -1
	}
	middle := (head + tail) / 2
	if slice[middle] == value {
		return middle
	} else if slice[middle] < value {
		return BinarySearch(slice, middle+1, tail, value)
	} else {
		return BinarySearch(slice, head, middle-1, value)
	}
}

  

原文地址:https://www.cnblogs.com/wujuntian/p/11612892.html

时间: 2024-08-18 06:37:00

四种排序算法与二分查找的相关文章

python几种排序算法和二分查找方法的实现

一.算法概念 - 含义:算法就是对问题进行处理且求解的一种实现思路或者思想. 评判程序优劣的方法 - 消耗计算机资源和执行效率(无法直观) 计算算法执行的耗时(不推荐,因为会受机器和执行环境的影响) 时间复杂度(推荐) 时间复杂度 - 评判规则:量化算法执行的操作/执行步骤的数量, - 如下列 def sumOfN(n): # 执行一步: theSum = 0 for i in range(1,n+1): # 下式一共执行n步,for循环不算一步,因为它是控制循环次数的 theSum = the

四种排序算法PHP实现类

四种排序算法的PHP实现:1) 插入排序(Insertion Sort)的基本思想是: 每次将一个待排序的记录,按其关键字大小插入到前面已经排好序的子文件中的适当位置,直到全部记录插入完成为止. 2) 选择排序(Selection Sort)的基本思想是: 每一趟从待排序的记录中选出关键字最小的记录,顺序放在已排好序的子文件的最后,直到全部记录排序完毕. 3) 冒泡排序的基本思想是: 两两比较待排序记录的关键字,发现两个记录的次序相反时即进行交换,直到没有反序的记录为止. 4) 快速排序实质上和

9种排序算法 2_二分插入排序

一 算法思想: 每步将一个待排序的纪录,按其关键码值的大小插入前面已经排序的文件中适当位置上,直到全部插入完为止:而查找适当位置的查找方法使用二分查找法,则叫做二分插入排序. 二 代码如下: public class Test2 { // 二分插入排序.随机数列中(100个),计算交换次数(交换的次数在2400-2800左右,时间复杂度O(n*n),效率与直接插入排序一样,只是改变查找方法) public static void binaryInsertSort(int[] array) { i

常用的四种排序算法

#include <stdio.h> void BubbleSort(int a[], int size, int order); void SelectSort(int a[], int size, int order); void InsertSort(int a[], int size, int order); void QuickSort(int a[], int size, int order); int main() { int a[5]={5,3,4,2,1}; int i; /

四种排序算法实现

目录 冒泡排序 冒泡算法 源代码(冒泡排序) 选择排序 选择算法 源代码(选择排序) 插入排序 插入算法 源代码(插入排序) 快速排序 快速排序算法 源代码(快速排序) 总结 References 冒泡排序 冒泡算法 比较相邻的元素.如果左边比右边大,就互换位置 对每一对相邻元素作同样的工作,从第一对到最后一对,完成后,最后元素为最大值 源代码(冒泡排序) //冒泡排序 public static void bubbleSort(int[] slist) { //从头开始遍历 for(int i

四种排序算法的时间比较

#include<iostream> #include<time.h> using namespace std; template<class T> inline void Swap(T& a, T& b); template<class T> void BubbleSort(T a[], int n); template<class T> void InsertionSort(T a[], int n); template<

php中的四种排序算法

1 1. 冒泡排序 2 3 思路分析:在要排序的一组数中,对当前还未排好的序列,从前往后对相邻的两个数依次进行比较和调整,让较大的数往下沉,较小的往上冒.即,每当两相邻的数比较后发现它们的排序与排序要求相反时,就将它们互换. 4 5 代码实现: 6 7 8 $arr=array(1,43,54,62,21,66,32,78,36,76,39); 9 function bubbleSort($arr) 10 { 11 $len=count($arr); 12 //该层循环控制 需要冒泡的轮数 13

12种排序算法:原理、图解、动画视频演示、代码以及笔试面试题目中的应用

出处:http://blog.csdn.net/han_xiaoyang/article/details/12163251. 声明:版权所有,转载请注明出处,谢谢. 0.前言 从这一部分开始直接切入我们计算机互联网笔试面试中的重头戏算法了,初始的想法是找一条主线,比如数据结构或者解题思路方法,将博主见过做过整理过的算法题逐个分析一遍(博主当年自己学算法就是用这种比较笨的刷题学的,囧),不过又想了想,算法这东西,博主自己学的过程中一直深感,基础还是非常重要的,很多难题是基础类数据结构和题目的思想综

13种排序算法详解

0.前言 从这一部分开始直接切入我们计算机互联网笔试面试中的重头戏算法了,初始的想法是找一条主线,比如数据结构或者解题思路方法,将博主见过做过整理过的算法题逐个分析一遍(博主当年自己学算法就是用这种比较笨的刷题学的,囧),不过又想了想,算法这东西,博主自己学的过程中一直深感,基础还是非常重要的,很多难题是基础类数据结构和题目的思想综合发散而来.比如说作为最基本的排序算法就种类很多,而事实上笔试面试过程中发现掌握的程度很一般,有很多题目,包括很多算法难题,其母题或者基本思想就是基于这些经典算法的,