通用 冒泡排序

1、因老师作业需要经常需要排序导致冒泡排序写了很多遍,一起之下写了个链表和数组 类型无关排序函数 (当然数组直接用C++提供的快速排序之类的也可以)

 

a、数组通用排序

  

int SortBubble(  void * arry,                      //要被排序的数组首地址     

         int n,                                                                //数组元素的个数     

         int ElmentSize ,                                                //数组每个元素的大小,即占用字节数     

         int compare(const void * pia,const void * pib))    //比较函数的指针

  char * p = (char*)arry;                      //这一部也是必不可少的,为了后面数组递增        

  char *pTemp = (char * )malloc(ElmentSize*sizeof(char));   //用于交换的临时变量

   int i = 0;

   int j = 0;

 

  memset(pTemp,0,ElmentSize*sizeof(char));

  for (i=0;  i<n-1;  i++)                      //排序的躺数

    { 

     bool bFlag = true;

      for (j=0,p=(char*)arry; j<n-i-1; j++)

       {   

        if ( compare(p+j*ElmentSize,p+(j+1)*ElmentSize )  )            //相邻元素比较 

            {  

               memcpy (pTemp, (p+j*ElmentSize), ElmentSize);                 //相似操作  temp = arry[i] 

               memcpy ((p+j*ElmentSize), p+(j+1)*ElmentSize, ElmentSize);     //相似操作   arry[j] = arry[i]  

               memcpy (p+(j+1)*ElmentSize, pTemp, ElmentSize);                    //相似操作    arry[i] = temp   

             }       

       }

      if(bFlag)  break;                                   //本次便利没有排序动作发生,已经排好序了,提前退出排序

   }

  return 0;

}

 

2、链表排序

   先吃饭 待续

 

 

转载于:https://www.cnblogs.com/luomg/archive/2013/05/17/dfdfds.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值