排序算法----选择排序 冒泡排序

 

#include  < stdio.h >
#include 
< string .h >
typedef 
int  ( * COMPAREFUNC)( void *  p1,  void   * p2);
typedef 
void  ( * SELECT)( void   ** a,  int  len);
int  compfunc( void   * p1,  void   * p2);
void  select_sort( void   ** a,  int  len, COMPAREFUNC compfunc);
void  bubble_sort( void   ** a,  int  len, COMPAREFUNC compfunc);
void  mysort( void   ** int , COMPAREFUNC,  void  ( * )( void ** , int , COMPAREFUNC));
void  print( void   ** a,  int  len);

int  strcomp( void   * p1,  void   * p2)
{
    
return strcmp((char *)p1, (char *)p2);
}

int  intcomp( void   * p1,  void   * p2)
{
    
return  *(int*)p1-*(int*)p2;
}

void  select_sort( void   ** a,  int  len, COMPAREFUNC compfunc)
{
    
int i = 0;
    
int j = 0;
    
int k = 0;
    
void *ptmp = NULL;

    
for (i=0; i < len-1; i++{
        k
=i;    /*sentimel*/
        
for (j=i+1; j< len; j++{
            
if ( compfunc(a[k],a[j]) > 0{
                k
=j;
            }

        }

        
if ( k != i) {
            ptmp 
= a[i];
            a[i] 
= a[k];
            a[k] 
= ptmp;
        }

    }

}

void  bubble_sort( void   ** a,  int  len, COMPAREFUNC compfunc)
{
    
int i = 0;
    
int j = 0;
    
int k = 0;
    
void *ptmp = NULL;

    
for (i=0; i < len-1; i++{
        k
=0;    /*sentimel*/
        
for (j=len-1; j>i; j--{
            
if ( compfunc(a[j-1],a[j]) > 0{
                ptmp 
= a[j];
                a[j] 
= a[j-1];
                a[j
-1= ptmp;
                k 
= 1;
            }

        }

        
if ( k == 0{
            
break;        
        }

    }

}


void  mysort( void   ** a,  int  len, COMPAREFUNC compfunc,  void  ( * method)( void ** , int , COMPAREFUNC)) {
    method(a, len, compfunc);
}


void  strprint( void   ** a,  int  len)
{
    
int i = 0;

    
for (i = 0; i < len; i++{
        printf(
"%s ", (char *)a[i]);
    }

}

void  intprint( void   ** a,  int  len)
{
    
int i = 0;

    
for (i = 0; i < len; i++{
        printf(
"%d "*(int *)a[i]);
    }

}


void  main( void )
{
#define N 6
    
char *a[N]={"bdd""aaa","ffc","dee","dde""gf"};
    
int c[N]={6,1,3,5,4,2};
    
int *b[N];
    
int i = 0;

    
for (i =0;i<N;i++{
        b[i]
=&c[i];
    }


    strprint(a, N);
    printf(
" ");
    mysort(a, N, strcomp, bubble_sort);
//    mysort(a, N, strcomp, select_sort);
    strprint(a, N);
    printf(
" ");
    
    intprint(b, N);
    printf(
" ");
    mysort(b, N, intcomp, bubble_sort);
//    mysort(b, N, intcomp, select_sort);
    intprint(b, N);
    printf(
" ");
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值