“同学你是做什么的?”
“Java”
“你呢?”
“C#”
“那你呢?”
“我是GoLang”
为啥程序员要用语言来划分?
起因
最新在重温C语言,这玩意从学校出来后就没再用过了,重温的时候找算法题来练练手感,正好练习到了快速排序,就准备用C语言实现一下,但是在获取子数组引用的时候无从下手了,memcpy函数只是从内存地址拷贝一个新数组出来,跟原来的数组并没有引用关系了,这就很麻烦了,一时间断了思绪,第二天起来晨跑后,茅塞顿开,GoLang的切片不正好是子数组的引用么(改了子数组原始数组也会改变),然后迅速用GoLang实现了一下,果然,前辈们都说程序员不要限制在某种语言里,要打开思路,在适合的场景下用适合的语言才是王道。
贴一下GoLang的快排实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
| package main
import ( "fmt" )
func main() { array := []int{8, 7, 6, 1, 0, 9, 2} sort(array) for i, v := range array { fmt.Printf("i:%d,v:%d\n", i, v) } }
func sort(array []int) { len := len(array) if (len <= 1) { return } pivot := array[len-1] pointer2 := -1 flagMax := true for i := 0; i < len; i++ { if array[i] > pivot && flagMax { pointer2 = i flagMax = false continue }
if pointer2 >= 0 && array[i] < pivot { swap(array, pointer2, i) flagMax = true i = pointer2 pointer2 = -1 continue }
if i >= len-2 && pointer2 >= 0 { swap(array, pointer2, len-1) flagMax = true
sort(array[0:pointer2])
sort(array[pointer2+1 : len]) }
if i >= len-2 && pointer2 < 0 { flagMax = true if len > 2 { sort(array[0 : len-1]) } } } }
func swap(array []int, first int, secode int) { tmp := array[first] array[first] = array[secode] array[secode] = tmp }
|
本文作者:oldmee
本文链接:https://oldmee.github.io/2023/07/29/quick-sort-again/
版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。