hnit-acm/hfunc

proposal(sort):对sort进行拓展

nieaowei opened this issue · 0 comments

使用函数思维对sort进行拓展,主要目的:

  • 减少大量的函数定义(使用官方sort排序时,需要实现sort包内的Interface接口)
  • 减少type定义
  • 有利于代码阅读(代码更加集中,逻辑点更清晰)
  • 对临时排序友好
package main

func Sort(length uint64, less func(i, j uint64) bool, swap func(i, j uint64)) {
	for m := uint64(0); m < length; m++ {
		for i := uint64(0); i < length; i++ {
			if i == length-1 {
				break
			}
			if less(i, i+1) {
				swap(i, i+1)
			}
		}
		length--
	}
}


func SortInts(s []int) {
	Sort(uint64(len(s)),
		func(i, j uint64) bool {
			return s[i] < s[j]
		},
		func(i, j uint64) {
			s[i], s[j] = s[j], s[i]
		},
    )
}

func main() {
	data := []int{2, 1, 4,3}
	Sort(uint64(len(data)),
		func(i, j uint64) bool {
			return data[i] < data[j]
		},
		func(i, j uint64) {
			data[i], data[j] = data[j], data[i]
		})
	SortInts(data)
}