github.com/wangyougui/gf/v2@v2.6.5/container/garray/garray_func.go (about)

     1  // Copyright GoFrame Author(https://goframe.org). All Rights Reserved.
     2  //
     3  // This Source Code Form is subject to the terms of the MIT License.
     4  // If a copy of the MIT was not distributed with this file,
     5  // You can obtain one at https://github.com/wangyougui/gf.
     6  
     7  package garray
     8  
     9  import "strings"
    10  
    11  // defaultComparatorInt for int comparison.
    12  func defaultComparatorInt(a, b int) int {
    13  	if a < b {
    14  		return -1
    15  	}
    16  	if a > b {
    17  		return 1
    18  	}
    19  	return 0
    20  }
    21  
    22  // defaultComparatorStr for string comparison.
    23  func defaultComparatorStr(a, b string) int {
    24  	return strings.Compare(a, b)
    25  }
    26  
    27  // quickSortInt is the quick-sorting algorithm implements for int.
    28  func quickSortInt(values []int, comparator func(a, b int) int) {
    29  	if len(values) <= 1 {
    30  		return
    31  	}
    32  	mid, i := values[0], 1
    33  	head, tail := 0, len(values)-1
    34  	for head < tail {
    35  		if comparator(values[i], mid) > 0 {
    36  			values[i], values[tail] = values[tail], values[i]
    37  			tail--
    38  		} else {
    39  			values[i], values[head] = values[head], values[i]
    40  			head++
    41  			i++
    42  		}
    43  	}
    44  	values[head] = mid
    45  	quickSortInt(values[:head], comparator)
    46  	quickSortInt(values[head+1:], comparator)
    47  }
    48  
    49  // quickSortStr is the quick-sorting algorithm implements for string.
    50  func quickSortStr(values []string, comparator func(a, b string) int) {
    51  	if len(values) <= 1 {
    52  		return
    53  	}
    54  	mid, i := values[0], 1
    55  	head, tail := 0, len(values)-1
    56  	for head < tail {
    57  		if comparator(values[i], mid) > 0 {
    58  			values[i], values[tail] = values[tail], values[i]
    59  			tail--
    60  		} else {
    61  			values[i], values[head] = values[head], values[i]
    62  			head++
    63  			i++
    64  		}
    65  	}
    66  	values[head] = mid
    67  	quickSortStr(values[:head], comparator)
    68  	quickSortStr(values[head+1:], comparator)
    69  }