golang数组排序算法

冒泡排序

图 https://www.cnblogs.com/onepixel/articles/7674659.html

package main

import (
  "fmt"
)

func bubbleSort(slice []int) []int {
	for n := 0; n <= len(slice); n++ {
		for i := 1; i < len(slice)-n; i++ {
			if slice[i] < slice[i-1] {
				slice[i], slice[i-1] = slice[i-1], slice[i]
			}
		}
	}
	return slice
}

func main() {

	var arr = [...]int{99, 51, 41, 2, 31}

	var rarr = bubble(arr[:])
	fmt.Println(rarr)
}

比较排序

package main

import (
	"fmt"
)

func selectionSort(slice []int) []int {
	for n := 0; n <= len(slice); n++ {
		fmt.Println(slice)
		fmt.Println("#####################")
		for i := n + 1; i < len(slice); i++ {

			if slice[n] > slice[i] {
				slice[n], slice[i] = slice[i], slice[n]
				fmt.Println(slice)
			}
		}
		fmt.Println("---------------")
	}
	return slice
}

func main() {

	var arr = [...]int{99, 51, 41, 2, 31}

	var rarr = selectionSort(arr[:])
	fmt.Println(rarr)
}

插入排序

快速排序

思路:以一个基准数将数组拆分为两个,一边大于这个数,一边小于这个数。从数组第0个开始,首先先记录此基准数的下标和值  {312, 84, 543, 5, 100, 23} ,k=0 v=312。需要传入一个从哪里开始到哪里的位置。这里基准数为第一个,顾循环位置就从0+1开始 循环完之后为 84 84 543 5 100 23

package main

import (
	"fmt"
)

func qsort(arr []int, start int, end int) {
	if start >= end {
		return
	}

	key := start
	value := arr[start] //记录当前基准值位置
	fmt.Println(arr)
	for n := start + 1; n <= end; n++ {
		// a[n] < arr[start]
		if arr[n] < value {
			arr[key] = arr[n]   //就将a[n]挪至arr[key]所在位置
			arr[n] = arr[key+1] //a[n]空缺了,将arr[key]向后移动一位
			// 理论上现在值为这个 {84, 84, 543, 5, 100, 23}
			key++ //key的位置改变了1位,key++
			//最后在将进位后的arr[key] = 之前保存的value即为
			// value=321 {84, 312, 543, 5, 100, 23}
			//这样完成了替换
		}
	}

	arr[key] = value
	fmt.Println("---------------------------")
	//一轮循环后该数组为[84 5 100 23 312 543]
	//将基准数两边的数进行进行排序 此时 key=3 start=0 左边为 start-key-1
	qsort(arr, start, key-1)
	qsort(arr, key+1, end) //右边为key+1-end
}

func main() {
	var array = [...]int{312, 84, 543, 5, 100, 23}
	qsort(array[:], 0, len(array)-1)
	fmt.Println(array)
}

原文地址:https://www.cnblogs.com/LC161616/p/9845642.html

时间: 2024-08-13 14:27:31

golang数组排序算法的相关文章

黑马程序员——C学习总结之数组排序算法实现

发表试试 黑马程序员--C学习总结之数组排序算法实现,布布扣,bubuko.com

js三种基础数组排序算法整理

数组排序,大概是每个程序员必须掌握的基本算法 ,作为一个刚入门的前端小卒,再被各种面试各种排序折磨过后 ,看过很多别人写的 算法 ,但看总归是理解的不是那么深刻 ,便想着自己整理一下这最基本的三个排序算法 ,希望对还在学习的你有些许帮助 .比较基本的三种算法 .冒泡.插入 .快速 . 首先来看冒泡排序法 ,基本原理其实就是对数组进行两层循环,外层循环控制次数,数组中有多少个成员,便是要进行多少次内层遍历,不断地将当前成员和下一成员进行对比 ,其实在群众偶其中有很多次是重复对比的 ,先看这样一个写

写一个二维数组排序算法函数,能够具有通用性,可以调用php内置函数

下面代码没有认真看: <?php //二维数组排序, $arr是数据,$keys是排序的健值,$order是排序规则,1是升序,0是降序 function array_sort($arr, $keys, $order = 0) { if (!is_array($arr)) { return false; } $keysvalue = array(); foreach ($arr as $key => $val) { $keysvalue[$key] = $val[$keys]; } if ($

数组排序算法

//冒泡算法 时间复杂度:O(n2) 空间复杂度:O(1) for(int i=0;i<arr.length-1;i++){ for(int j=0;j<arr.length-1-i;j++){ if(arr[j]>arr[j+1]){ int temp = arr[j]; arr[j] = arr[j+1]; arr[j+1] = temp; } } } for(int i=0;i<arr.length;i++){ System.out.print(arr[i]+"\t

golang快速排序算法

go语言真的是很简洁,下面用它来实现快速排序算法 package qsort func quickSort(values []int, left int, right int) { if left < right { temp := values[left] i, j := left, right for { for values[j] > temp { j-- } for values[i] < temp { i++ } if i >= j { break } values[i]

Java数组排序算法之直接选择排序

1.基本思想 直接选择排序的基本思想是将指定排序位置与其他数组元素分别对比,如果满足条件就交换元素值,注意这里区别冒泡排序,不是交换相邻元素,而是把满足条件的元素与指定的排序位置交换. 与冒泡排序相比,直接选择排序的交换次数要少很多,因此速度更快些. 2.算法示例 每一趟从待排序的数组元素中选出最小(或最大)的一个元素,顺序的放在已排好序的数组元素前或后,直到全部待排序的数据元素排完. 例如有一个6个元素的数组[63 4 24 1 3 15],排序大致过程如下所述: 第1轮排序:63和15交换位

JAVA中的数组排序算法

1.各种排序图解: 代码实现 1 import java.util.Arrays; 2 3 public class ArraySort { 4 //选择排序 5 public static void slecteSort(int[] arr){ 6 System.out.println(Arrays.toString(arr)); 7 for(int i=0;i<arr.length;i++){ 8 int minIndex=i; 9 for(int j=i+1;j<arr.length;j

一些数组排序算法的简单实现(冒泡、插入、希尔、归并和qsort)

#include <stdlib.h> #include <string.h> #include "sort.h" //冒泡排序 int bubbleSort(int a[], int n) { int i, j; for (i=n-1; i>=0; i--) { for (j=0; j<i; j++) { if (a[j]>a[j+1]) {//交换a[i]和a[j],也可使用临时变量实现 a[j] += a[j+1]; a[j+1] = a

golang冒泡排序算法

用go语言实现的冒泡排序 package bubblesort func BubbleSort(values []int) { flag := true for i, size := 0, len(values); i < size; i++ { flag = true for j, end := 0, len(values)-i-1; j < end; j++ { if values[j] > values[j+1] { values[j], values[j+1] = values[