golang container heap&sort

go语言也自己的容器数据结构。主要有list、heap和ring

package main

import (
    "container/heap"
    "fmt"
    "sort"
    // "strconv"
)

type HeapInt []int

func (h HeapInt) Len() int {
    return len(h)
}

func (h HeapInt) Less(i, j int) bool {
    return h[i] < h[j]
}
func (h HeapInt) Swap(i, j int) {
    h[i], h[j] = h[j], h[i]
}

func (h *HeapInt) Push(x interface{}) {
    *h = append(*h, x.(int))
}
func (h *HeapInt) Pop() interface{} {
    old := *h
    n := len(old)
    x := old[n-1]
    *h = old[0 : n-1]
    return x
}

func (h *HeapInt) Search(n Item,f func(Item)bool{})int {

}

func main() {
    slice := make(HeapInt, 0)
    heap.Init(&slice)
    for i := 0; i < 10; i++ {
        heap.Push(&slice, i*i)
    }
    for i := 0; i < 10; i++ {
        fmt.Println(slice[i])
    }
    bb := sort.SearchInts(slice, 23)
    fmt.Println(bb)
}
时间: 2024-10-29 13:38:50

golang container heap&sort的相关文章

golang中container/heap包源码分析

学习golang难免需要分析源码包中一些实现,下面就来说说container/heap包的源码 heap的实现使用到了小根堆,下面先对堆做个简单说明 1. 堆概念 堆是一种经过排序的完全二叉树,其中任一非终端节点的数据值均不大于(或不小于)其左孩子和右孩子节点的值. 最大堆和最小堆是二叉堆的两种形式. 最大堆:根结点的键值是所有堆结点键值中最大者. 最小堆:根结点的键值是所有堆结点键值中最小者. 2. heap 树的最小元素在根部,为index 0. heap包对任意实现了heap接口的类型提供

golang 标准库 container/ring 及 container/heap

由于目前golang 没有提供泛型机制,所以通用容器实现基本和 c 类似,golang 用 interface{} 做转接, c 用 void * 转接. ring 包实现循环双向链表: type Ring struct   {        next, prev *Ring        Value      interface{}  } 内部导出一个用户可以操作的Value 字段. heap 包实现 binary heap : type Interface interface {      

堆排序(Heap Sort)的C语言实现

堆排序(Heap Sort)具体步骤为 将无序序列建成大顶堆(小顶堆):从最后一个非叶子节点开始通过堆调整HeapAdjust()变成小顶堆或大顶堆 将顶部元素与堆尾数组交换,此是末尾元素就是最大值,顶部元素不满足堆,故要将顶部元素在剩余的i-1个元素中调整为堆 反复第2步.直至所有顶点被输出,序列变成从小到大的有序序列 C语言实现(编译器Dev-c++5.4.0,源代码后缀.cpp) 原创文章,转载请注明来自钢铁侠Mac博客http://www.cnblogs.com/gangtiexia 1

堆排序 Heap Sort

堆排序是一种选择排序,其时间复杂度为O(nlogn). 堆的定义 n个元素的序列{k1,k2,…,kn}当且仅当满足下列关系之一时,称之为堆. 情形1:ki <= k2i 且ki <= k2i+1 (最小化堆或小顶堆) 情形2:ki >= k2i 且ki >= k2i+1 (最大化堆或大顶堆) 其中i=1,2,…,n/2向下取整; 若将和此序列对应的一维数组(即以一维数组作此序列的存储结构)看成是一个完全二叉树,则堆的含义表明,完全二叉树中所有非终端结点的值均不大于(或不小于)其左

Heap Sort (堆排序)

Heap sort is common in written exams. First of all, what is heap? Heap is a kind of data struct that can be seen as a complete binary tree. The object to indicate heap is an array A that have two attributes: length[A] shows the number of elements in

算法 Heap sort

// -------------------------------------------------------------------------------------------------------------------- // <copyright file="Program.cs" company="Chimomo's Company"> // // Respect the work. // // </copyright>

PAT甲题题解1098. Insertion or Heap Sort (25)-(插入排序和堆排序)

题目就是给两个序列,第一个是排序前的,第二个是排序中的,判断它是采用插入排序还是堆排序,并且输出下一次操作后的序列. 插入排序的特点就是,前面是从小到大排列的,后面就与原序列相同. 堆排序的特点就是,后面是从小到大排列的最大的几个数p~n-1,前面第一位则是p-1. 所以只要先按照插入排序的特点来判断是否为插入排序,接下来再进行操作就可以了,这里要手动写下最大堆的更新操作. 代码: #include <iostream> #include <cstdio> #include <

PAT (Advanced Level) 1098. Insertion or Heap Sort (25)

简单题.判断一下是插排还是堆排. #include<cstdio> #include<cstring> #include<cmath> #include<vector> #include<map> #include<queue> #include<stack> #include<algorithm> using namespace std; const int maxn=200; int a[maxn],b[m

PAT-1098(Insertion Or Heap Sort)

题目链接见这里 分析:考察的是插入排序和堆排序两种基本的数据结构,注意利用两种排序的基本特征----插入排序不影响全局,而堆排序影响全局 #include <stdio.h> #define SWAP(a,b) a = b-a+(b=a) #define N 105 void Input(int *unSorted, int partialSorted[], int *n){ int i; scanf("%d",n); for(i=1;i<=*n;i++) scanf