封装qsort函数

package qsort

/*
#include <stdlib.h>
typedef int (*qsort_cmp_func_t)
(const void* a, const void* b); extern int _cgo_qsort_compare(void* a, void* b);
*/
import "C"
import (
"sync"
"unsafe"
) var go_qsort_compare_info struct {
fn func(a, b unsafe.Pointer) int
sync.Mutex
} //export _cgo_qsort_compare
func _cgo_qsort_compare(a, b unsafe.Pointer) C.int {
return C.int(go_qsort_compare_info.fn(a, b))
} func Sort(base unsafe.Pointer, num, size int, cmp func(a, b unsafe.Pointer) int) {
go_qsort_compare_info.Lock()
defer go_qsort_compare_info.Unlock()
go_qsort_compare_info.fn = cmp
C.qsort(base, C.size_t(num), C.size_t(size),
C.qsort_cmp_func_t(C._cgo_qsort_compare),
)
}

调用qsort.Sort实现排序

package main

//extern int go_qsort_compare(void* a, void* b);
import "C" import (
"fmt"
"github.com/w3liu/algorithm/books/go-advanced-program/2.6qsort_practice/qsort"
"unsafe"
) func main() {
values := []int32{42, 9, 101, 95, 27, 25}
qsort.Sort(unsafe.Pointer(&values[0]), len(values),
int(unsafe.Sizeof(values[0])),
func(a, b unsafe.Pointer) int {
pa, pb := (*int32)(a), (*int32)(b)
return int(*pa - *pb)
},
)
fmt.Println(values)
}

github地址

最新文章

  1. Josephus环类问题,java实现
  2. 在iOS中使用ZXing库[转]
  3. ZooKeeper日志与快照文件简单分析
  4. 20145222黄亚奇《Java程序设计》第5周学习总结
  5. 2013年7月份第1周51Aspx源码发布详情
  6. H - Frequent values
  7. mvc+entity framework database first,生成的model每次更新一个表会更新所有的model
  8. NOIP(提高组)DAY1国王游戏
  9. 机器视觉工具箱-Machine Vision Toolbox for Matlab
  10. centos 下 搭建 php 环境
  11. 知识点2-5:了解Razor语法
  12. Bootstrap3.0入门学习系列
  13. (译)Windsor入门教程---第三部分 编写第一个Installer
  14. RoR - Nested Resources, Security ,pagination
  15. GNU C 与 ANSI C(下)
  16. requests模块的cookie和代理操作
  17. asp.net core中遇到需要自定义数据包解密方法的时候
  18. 工具类。父类(Pom文件)
  19. Ubuntu12.04+OpenERP7.0安装笔记
  20. Servlet的请求转发和重定向

热门文章

  1. Copy constructor vs assignment operator in C++
  2. zabbix之监控Nginx连接数
  3. jmeter设置参数化
  4. Python实战之MySQL数据库操作
  5. Java 设计模式--策略模式,枚举+工厂方法实现
  6. 【Jenkins系列】-备份机制
  7. 企业级BI是自研还是采购?
  8. Mysql资料 慢查询
  9. DevOps和SRE的区别
  10. 高可靠性——TSN 802.1Qci协议介绍