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 slice x given the provided less function.
     8  // It panics if x is not a slice.
     9  //
    10  // The sort is not guaranteed to be stable: equal elements
    11  // may be reversed from their original order.
    12  // For a stable sort, use SliceStable.
    13  //
    14  // The less function must satisfy the same requirements as
    15  // the Interface type's Less method.
    16  func Slice(x interface{}, less func(i, j int) bool) {
    17  	rv := reflectValueOf(x)
    18  	swap := reflectSwapper(x)
    19  	length := rv.Len()
    20  	quickSort_func(lessSwap{less, swap}, 0, length, maxDepth(length))
    21  }
    22  
    23  // SliceStable sorts the slice x using the provided less
    24  // function, keeping equal elements in their original order.
    25  // It panics if x is not a slice.
    26  //
    27  // The less function must satisfy the same requirements as
    28  // the Interface type's Less method.
    29  func SliceStable(x interface{}, less func(i, j int) bool) {
    30  	rv := reflectValueOf(x)
    31  	swap := reflectSwapper(x)
    32  	stable_func(lessSwap{less, swap}, rv.Len())
    33  }
    34  
    35  // SliceIsSorted reports whether the slice x is sorted according to the provided less function.
    36  // It panics if x is not a slice.
    37  func SliceIsSorted(x interface{}, less func(i, j int) bool) bool {
    38  	rv := reflectValueOf(x)
    39  	n := rv.Len()
    40  	for i := n - 1; i > 0; i-- {
    41  		if less(i, i-1) {
    42  			return false
    43  		}
    44  	}
    45  	return true
    46  }
    47  

View as plain text