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

2021-10-01 16:02:17 字數 1743 閱讀 7521

快速排序

當遞迴終止時,結束乙個waitgroup,遞迴開始時,加入乙個waitgroup直到所有排序操作結束,waitgroup空

快排流程

import (

"fmt"

"sync"

)var wg sync.waitgroup

func quicksort(a int, l, h int)

i, j, k := l + 1, h , a[l]

for true

for j >= l && a[j] > k

if i >= j

t := a[i]

a[i] = a[j]

a[j] = t

}t := a[l]

a[l] = a[j]

a[j] = t

wg.add(2)

go quicksort(a, l, j -1)

go quicksort(a, j + 1, h)

wg.done()

}

歸併排序

當遞迴終止時,結束傳入的waitgroup,遞迴前建立乙個waitgroup,然後加入兩個操作,waitgroup空後,進行歸併,呼叫歸併排序時建立的waitgroup完成時,排序完成

package main

import (

"fmt"

"sync"

)type comparable inte***ce ) bool

greater(b inte***ce{}) bool

}type integer int // comparable

func (a integer) less(b inte***ce{}) bool

func (a integer) greater(b inte***ce{}) bool

type double float64 // comparable

func (a double) less(b inte***ce{}) bool

func (a double) greater(b inte***ce{}) bool

type string string // comparable

func (a string) less(b inte***ce{}) bool

func (a string) greater(b inte***ce{}) bool

/*請按照comparable介面要求,實現類似上述三種型別的可比較型別*/

func merge(s, t comparable, l, m, r int) else

} for i != m + 1

for j != r + 1

for i=l;i<=r;i++

}/*請按照comparable介面要求,實現類似上述三種型別的可比較型別*/

func mergesort(s, t comparable, l, r int, w *sync.waitgroup)

w.done()

}func main()

t := make(comparable, 8)

var wg *sync.waitgroup = new(sync.waitgroup)

wg.add(1)

go mergesort(a,t,0,7, wg)

wg.wait()

fmt.println(a)

}

Golang 歸併排序 MergeSort

歸併排序是建立在歸併操作上的一種有效的排序演算法。該演算法是採用分治法 divide and conquer 的乙個非常典型的應用。將已有序的子串行合併,得到完全有序的序列 即先使每個子串行有序,再使子串行段間有序。若將兩個有序表合併成乙個有序表,稱為2 路歸併。演算法描述 def mergesor...

快速排序 歸併排序

感覺好久之前不寫這些基礎的東西忽然覺著,想複習一下,就簡單溫習一下排序的例子 package com.ruishenh.algoritmic public class sort static void printmsg int arrs system.out.println static int g...

快速排序,歸併排序

快速排序 quicksort 是對 氣泡排序的一種改進。設要排序的 陣列是a 0 a n 1 首先任意選取乙個資料 通常選用陣列的第乙個數 作為關鍵資料,然後將所有比它小的數都放到它前面,所有比它大的數都放到它後面,這個過程稱為一趟快速排序。需要注意的是,多個相同的值的相對位置也許會在演算法結束時產...