自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(10)
  • 收藏
  • 关注

原创 golang协程并发同步-条件变量

条件变量:到一定条件或事件再处理数据用于很典型的生成-消费模型func main(){ proch := make(chan bool,1) conch := make(chan bool,1) wg := sync.WaitGroup{} wg.Add(2) go consume(conch,proch,&wg) go producer(proch,conch,&...

2019-07-20 17:44:45 732

原创 golang协程并发同步-信号量

只允许1个进入临界区的是互斥, 允许多个进入临界区的是信号量.func toilet(i int,ch chan int,wg *sync.WaitGroup){ fmt.Println(i,"进入厕所") rand.Seed(int64(i)) t := rand.Intn(10) time.Sleep(time.Duration(t)*time.Second)//随机时间 fmt....

2019-07-20 16:40:36 685

原创 golang协程并发同步-死锁问题

死锁产生条件:互斥,占有并等待,不可抢占,循环等待type Account struct { Id string Balance float64 lock sync.Mutex}func (a *Account) deposit(amount float64){ a.Balance += amount}func (a *Account) withdrew(amount floa...

2019-07-20 15:36:04 1196

原创 golang协程并发同步-互斥锁

func main() { num := 0 lock := sync.Mutex{} wg :=sync.WaitGroup{} wg.Add(2) go add(&num,&lock,&wg)//需要传入同一个锁 go reduce(&num,&lock,&wg) wg.Wait()//等待协程完成 fmt.Println(num...

2019-07-20 14:44:53 970

原创 golang实现十大经典算法:选择排序

选择排序要点:每次都选出最大的,放到位置上选择排序:时间较长,不稳定func selectSort(a[]int ,n int){ for i:=n;i>=0;i--{ max := i for j:=0;j<i;j++{ if a[j]>a[max]{ max = j } } a[max],a[i]=a[i],a[max] }}...

2019-07-02 18:12:23 305

原创 golang实现十大经典算法:冒泡排序

冒泡排序要点:两两比较,每次都浮出最大的那个冒泡排序优点:稳定,不需要额外空间,时间较长func bubSort(a[]int,n int){ for i:=n;i>0;i--{//总共浮出来的个数 for j:=0;j<i-1;j++{ if a[j]>a[j+1]{ a[j],a[j+1]= a[j+1],a[j] } } }}...

2019-07-02 18:10:05 161

原创 golang实现十大经典算法:堆排序

堆排序要点是运用堆的特点:最大堆前一半都是父节点堆排序的优点:已有最大堆,排序会快func main(){ a := []int{0,1,2,4,5,6,7,8,9,10}//注意0是开头,必定存在 heapSort(a,len(a)-1)}func shiftDown(a[]int,n int,i int){//下沉 for i*2<=n{ i = i*2 if i+...

2019-07-02 15:58:40 268

原创 golang实现十大经典算法:归并排序

归并排序要点,不断二分并排序,直到最后两个大的有序合并归并排序优点:时间复杂度:log(n),有序归并排序缺点:需要大量空间func merge(a[]int,b[]int)[]int{ l := []int{} for len(a)>0&&len(b)>0{ if a[0]<b[0]{ l = append(l,a[0]) a = ap...

2019-07-01 18:38:56 261

原创 golang实现十大经典算法:插入排序

插入排序的要点是找一个合理的位置插进入插入排序优点:原数组有序会非常快,稳定golang数组没有插入的操作,所以得自己实现 a := []int{1,3,4,52,2,5,7,3,7,9} for i:=1;i<len(a);i++{ todo := true for j:=i-1;j>=0;j--{ if a[j]<a[i]{ todo = fal...

2019-07-01 16:39:38 195

原创 golang实现十大经典算法:快速排序

快速排序中心点就是定义一个pivot,将小于piovt的放左边,大于pivot放右边,再不断循环这过程直到有序golang代码实现func main(){ l := []int{0,0,0,14124,124124,1} quicksort(l,0,len(l)-1)}func partion(a []int,start int ,end int) int { pivot,i,j :...

2019-07-01 14:49:54 515

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除