golang 版快速排序

2021-08-02 09:17:38 字數 1412 閱讀 4085

快速排序作為經典演算法,基本面試中都會遇到,今天記錄一下。

1.非遞迴版,這裡也是使用乙個棧的模型(自己實現)來實現。需要注意的是inte***ce轉int需要斷言。

package main

import (

"container/list"

"fmt"

)// stack is stack

type stack struct

func newstack() *stack

}func (stack *stack) push(value inte***ce{})

func (stack *stack) pop() inte***ce{}

return nil

}func (stack *stack) isempty() bool

func main()

quicksort(nums, 0, len(nums)-1)

fmt.println(nums)

}func quicksort(nums int, low, high int)

right, ok := stack.pop().(int)

if !ok

pivot := partition(nums, left, right)

if left < pivot-1

if right > pivot+1

} }}func partition(nums int, low, high int) int

nums[low], nums[high] = nums[high], nums[low]

for low < high && nums[high] > pivotkey

nums[low], nums[high] = nums[high], nums[low]

} return high

}

2.遞迴版

package main

import "fmt"

func main()

quicksort(nums)

fmt.println(nums)

}func quicksort(nums int)

func qsort(nums int, low, high int)

}func partition(nums int, low, high int) int

nums[low], nums[high] = nums[high], nums[low]

for low < high && nums[low] < pivotkey

nums[low], nums[high] = nums[high], nums[low]

} return low

}

排序 快速排序 平民版,公升級版

利用遞迴實現快排 將陣列或者子陣列劃分成左右兩個陣列 如何劃分成左右兩個陣列,是第二步會講的 呼叫自身對左邊陣列和右邊陣列進行排序。public void recquicksort int left,int right else 劃分所作的事情是,在陣列中選取乙個pivot樞紐值,然後劃分成兩個陣列...

golang 並行快速排序,歸併排序模板

快速排序 當遞迴終止時,結束乙個waitgroup,遞迴開始時,加入乙個waitgroup直到所有排序操作結束,waitgroup空 快排流程 import fmt sync var wg sync.waitgroup func quicksort a int,l,h int i,j,k l 1,h...

快速排序的java版

package quicksort public class swap public void doswap public int getx public int gety package quicksort public class quicksort private int partition ...