...

Source file src/sort/slice.go

     1	// Copyright 2017 The Go Authors. All rights reserved.
     2	// Use of this source code is governed by a BSD-style
     3	// license that can be found in the LICENSE file.
     4	
     5	package sort
     6	
     7	// Slice sorts the provided slice given the provided less function.
     8	//
     9	// The sort is not guaranteed to be stable. For a stable sort, use
    10	// SliceStable.
    11	//
    12	// The function panics if the provided interface is not a slice.
    13	func Slice(slice interface{}, less func(i, j int) bool) {
    14		rv := reflectValueOf(slice)
    15		swap := reflectSwapper(slice)
    16		length := rv.Len()
    17		quickSort_func(lessSwap{less, swap}, 0, length, maxDepth(length))
    18	}
    19	
    20	// SliceStable sorts the provided slice given the provided less
    21	// function while keeping the original order of equal elements.
    22	//
    23	// The function panics if the provided interface is not a slice.
    24	func SliceStable(slice interface{}, less func(i, j int) bool) {
    25		rv := reflectValueOf(slice)
    26		swap := reflectSwapper(slice)
    27		stable_func(lessSwap{less, swap}, rv.Len())
    28	}
    29	
    30	// SliceIsSorted tests whether a slice is sorted.
    31	//
    32	// The function panics if the provided interface is not a slice.
    33	func SliceIsSorted(slice interface{}, less func(i, j int) bool) bool {
    34		rv := reflectValueOf(slice)
    35		n := rv.Len()
    36		for i := n - 1; i > 0; i-- {
    37			if less(i, i-1) {
    38				return false
    39			}
    40		}
    41		return true
    42	}
    43	

View as plain text