简单算法复习

第一、插入排序

void InsertSort( int *a, int len )
{
    int i, j, key ;

    for( i=1; i<len; i++ )
    {

        key = a[i] ;
        for( j=i-1; j>=0&&a[j]>key; j-- )
            a[j+1] = a[j] ;

        a[j+1] = key ;
    }
}

 

第二、冒泡排序

void bubSort( int *a, int len )
{
    int i, j, temp ;
    for( i=len; i>0; i-- )
    {
        for( j=1; j<i; j++ )

        {
            if( *(a+j)<*(a+j-1) )
            {
                temp = *(a+j) ;
                *(a+j) = *(a+j-1) ;
                *(a+j-1) = temp ;
            }

        }
    }

}

 

第三、shell排序

void shell( int *a, int len )
{
    int i, j, temp, step ;
    for( step=len/2; step>0; step/=2 )
    {
        for( i=step; i<len; i++ )
        {
            temp = *( a+i ) ;
            for( j=i-step; j>=0&&temp<*(a+j); j-=step )
            {
                *(a+j+step) = *(a+j) ;

            }
            *(a+j+step) = temp ;
        }
    }

}

 

第四、快速排序(1)

int divide( int a[], int low, int high )
{
 int k = a[low] ;
 do
 {
  while ( low<high && a[high]>=k )
   --high ;
  if ( low<high )
  {
   a[low] = a[high] ;
   ++low ;
  }
  while ( low<high && a[low]<=k )
   ++low ;
  if ( low<high )
   a[high] = a[low] ;
 } while ( low!=high ) ;
 a[low] = k ;
 return low ;
}

void quiSort( int a[], int low, int high )
{
 int mid ;
 if( low>=high ) return ;
 mid = divide( a, low, high ) ;
 quiSort( a, low, mid-1 ) ;
 quiSort( a, mid+1, high ) ;
}

 

第五、快速排序(2)

其实只是分区方式不同而已,所以只列出分区函数。

int partition( int a[], int low, int high )
{
 int key = a[high] ;
 int i = low - 1 ;
 int temp, j ;
 for( j=low; j<=high-1; j++ )
 {
  if( a[j] <=key )
  {
   i = i+1 ;
   temp = a[i] ;
   a[i] = a[j] ;
   a[j] = temp ;
  }
 }
 temp = a[i+1] ;
 a[i+1] = a[high] ;
 a[high] = temp ;
 return (i+1) ;
}

 

第六、归并排序

void Merge_TwoArr( int *a, int *temp, int start, int mid, int end )
{
 int i, j, k ;
 k = start ;
 i = start ;
 j = mid + 1 ;

 while( i<=mid && j<=end )
 {
  if( a[i]<=a[j] )
   temp[k++] = a[i++] ;
  else
   temp[k++] = a[j++] ;
 }
 while( i<=mid )
  temp[k++] = a[i++] ;
 while( j<=end )
                temp[k++] = a[j++] ;

 for( i=start; i<=end; i++ )
  a[i] = temp[i] ;
}

void MergeSort( int *a,  int *temp, int start, int end )
{
 if( start<end )
 {
  int mid = ( start+end )/2 ;
  MergeSort( a, temp, start, mid ) ;
  MergeSort( a, temp, mid+1, end ) ;
  Merge_TwoArr( a, temp, start, mid, end ) ;
 }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值