基本排序算法(选择,冒泡,一般插入,二分插入)源码

 


#include 
< cstdlib >
#include 
< iostream >
#include 
< cassert >
using   namespace  std;

/* output array elements */
template 
< class  T >
void  Print( const  T  * in int  n)
{
    
for (int i = 0; i < n; i++)
    
{
        cout 
<< in[i] << " ";
    }

    cout 
<< endl;
}


template 
< class  T >
void  Exch2Item(T  & item1, T  & item2)
{
    T temp 
= item1;
    item1 
= item2;
    item2 
= temp;
}
;

/* bubble sort algorithm */
template 
< class  T >
void  BubbleSort(T  * input,  int  n)
{
    assert(input 
!= NULL);
    
for (int i = 0; i < n-1; i++)
    
{
        
for (int j = 0; j < (n - i - 1) ; j++)
        
{
            
if (input[j] > input[j + 1])
            
{
                Exch2Item(input[j], input[j 
+ 1]);
            }

        }

    }

}


/* select sort algorithm */
template 
< class  T >
void  SelectSort(T  * input,  int  n)
{
    assert(input 
!= NULL);
    
for (int i = 0; i < n-1; i++)
    
{
        
for (int j = i + 1; j < n; j++)
        
{
            
if (input[i] > input[j])
            
{
                Exch2Item(input[j], input[i]);
            }
                
        }

    }

}

/* common insert sort algorithm */
template 
< class  T >
void  InsertSort(T  * input,  int  n)
{    
    T temp;
    
for (int i = 1; i < n; i++)
    
{
        temp 
= input[i];
        
for (int j = 0; j < i; j++)
        
{
            
if (input[j] > temp)
            
{
                
break;
            }

        }


        
for (int k = i; k >= j+1; k--)
        
{
            input[k] 
= input[k - 1];
        }

        input[j] 
= temp;
    }

}

/* binary insert sort algorithm */
template 
< class  T >
void  BInsertSort(T  * input,  int  n)
{    
    T temp;
    
int l, r, mid, k;
    
for (int i = 1; i < n; i++)
    
{
        temp 
= input[i];
        l 
= 0;
        r 
= i - 1;
        
while (l <= r)
        
{
            mid 
= (l + r) / 2;
            
if (input[mid] < temp)
            
{
                l 
= mid +1;
            }

            
else if (input[mid] > temp)
            
{
                r 
= mid -1;
            }

            
else
            
{
                k 
= mid;
                
break;
            }

        }

        
/* now l is the place to insert, move forward the elements between l and i*/
        
for (int j = i; j >= l+1; j--)
        
{
            input[j] 
= input[j - 1];
        }

        input[l] 
= temp;
    }

}


int  main( int  argc,  char   * argv[])
{
    
int a[] = {12431352780489};
    printf(
"%d "sizeof(a));
    BubbleSort(a, 
sizeof(a)/sizeof(int));
    SelectSort(a, 
sizeof(a)/sizeof(int));
    BInsertSort(a, 
sizeof(a)/sizeof(int));
    Print(a, 
sizeof(a)/sizeof(int));
    
return 0;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值