几种常见的排序算法

 1. 插入排序
(Θ(n^2))
    INSERTION-SORT(A)
      for j ← 2 to length[A]
          do key ← A[j]
         △Insert A[j] into the sorted sequence A[1..j-1]
          i ← j-1
          while i>0 and a[i]>key
            do A[i+1]=A[i]
                i ← i-1
          A[i+1] ← key
          
   2.冒泡排序(Θ(n^2))
    BUBBLESORT(A)
      for i ← 1 to length[A]
         do for j ← length[A]downto i+1
            do if A[j]<A[j-1]
               the exchange A[j] ←→ A[j-1]
 
   3.合并排序(Θ(nlgn))
     调用方法:MERGE-SORT(A,1,length[A]) 
   
     MERGE-SORT(A,p,r)
       if p<r
         then q ← [(p+r)/2]
           MERGE-SORT(A,p,q)
 
           MERGE-SORT(A,q+1,r)
 
           MERGE(A,p,q,r)
     
     #合并    
     MERGE(A,p,q,r)
        n1 ←  q-p+1
        n2 ←  r-q
        create arrays L[1..n1+1] and R[1..n2+1]
        for i ← 1 to n1
          do L[i] ← A[p+i-1]
        for j ← to n2
          do R[q+j] 
        L[n1+1]  ←  ∞
        R[n2+1]  ←  ∞
        i  ←  1
        j  ←  1
        for k ← p to r
           do if L[i]<=R[j]
              then A[k]←L[i]
                   i ← i+1
              else A[k]← R[j]
                   j ← j+1
                   
   4.堆排序(Θ(nlgn))
 
       HEAPSORT(A)
         BUILD-MAX-HEAP(A)
         for i ← length [A] downto 2
             do exchange A[1] ←→ A[i]
                heapsize[A] ← heapsize[A]-1
                MAX-HEAPIFY(A,i) 
       
            
 
    #保持堆的性质
(使以i为根的子树成为最大堆)
   MAX-HEAPIFY(A,i)
     l  ←  LEFT[i]
                     r  ←  RIGHT[i] 
     if l<= heap-size[A] and A[l]>A[i]
        then largest ← l
        else largest ← i
     if r <= heap-size[A] and A[r]>A[i]
        then largest ← r
     if largest != i     #if A[i]最大则完成 
        then exchange A[i]←→A[largest]
             MAX-HEAPIFY(A,largest)
             
    #建堆
      BUILD-MAX-HEAP(A)
         heap-size[A] ← length[A]
         for i ← length[A]/2 downto 1
             do MAX-HEAPIFY(A,i)
 
             
    
    5. 快速排序(Θ(n^2))
 
        
        调用方法:QUICKSORT(A,1,length[A])
        
 
        QUICKSORT(A,p,r)
          if p<r
          then q=PARTITION(A,p,r)
              QUICKSORT(A,p,q-1)
              QUICKSORT(A,q+1,r)
              
        #PARTITION 对数组A[p..r]进行就地重排:
         PARTITION(A,p,r)
          x ← A[r]
          i ← p-1
           for j ←  p to r-1
              do if A[j]<=x 
                then i ← i+1
                  exchange A[i] ←→ A[j]
           echange A[i+1] ←→ A[r]
           return i+1;              

                  


欢迎留言交流


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值