常见集中的排序算法实现

总结一下常见的排序算法,用代码实现

一、插入排序

算法思想:该算法假设有数组A,元素个数为N,假设前i-1个数都是排好序的,那么第i个输需要从i-1个数开始依次朝前比较,从而找到合适的位置插入,而该位置后面的数需要依次向后移动一个位置。

代码如下:(个人的编程风格)

 

#include<stdio.h>
typedef int     INT;
typedef void    VOID;
typedef short   SHORT;
typedef long    LONG;
typedef static  STATIC;
typedef char    CHAR;
/*************************************
  author     : ***明  
  date       : 2013/12/11
description: 插入排序 
  IN         : piData
  IN         :iLength
  OUT        : 
**************************************/
VOID InsertSort(INT *piData, INT iLength)
{   
      INT     i  = 0;
      INT     j  = 0;
      INT    iKey = 0;
      for (j  = 1; j  < iLength; j ++)
      {
            iKey = *(piData + j);
            i = j -1;
            while((i >= 0) && (*(piData + i) > iKey))
            {
                  *(piData + i + 1) = *(piData + i);
                   i = i - 1;
            }
            *(piData + i + 1) = iKey;
       }
}

 

二、交换排序
算法思想:该算法假设有数组A,数组元素个数为N,首先从前N个数中选出最小的一个放在第一个位置,然后从剩余的N-1个数中选出最小的数放在第二个位置,依次循环,最后完成排序
代码如下:

/*************************************
  author    : **明  
  date      : 2013/12/11
description : 选择排序 
  IN        : piData
  IN        : iLength
  OUT       : 
**************************************/
VOID ExchangeSort(INT *piData, INT iLength)
{
        INT i      = 0;
        INT j      = 0;
        INT iMin = *piData;
        for (i = 0; i < (iLength - 1); i++)
        {    
              for (j = i + 1; j < iLength; j++)
              {
                    if (iMin > (*(piData + j)))
                    {   
                            iMin = *(piData + j);
                            *(piData + i) = iMin;
                    }                           
              }
        }
}

三、冒泡排序

算法思想:该算法假设有数组A,数组元素个数为N,拿第一个数和第二个数比较,如果第一个数比第二个大,则交换顺序,否则位置不变,然后依次拿第二个数和第三个比较,则遍历N个数后则保证最大的一个数在下标最大的位置。接着遍历前N-1个数,保证第二大的数在下标第二大的位置,以此类推。
代码如下:

/*************************************
  author    : **明  
  date      : 2013/12/15
description : 冒泡排序 
  IN        : piData
  IN        : iLength
  OUT       : 
**************************************/
VOID BubbleSort(INT *piData, INT iLength)
{
        INT i      = 0;
        INT j      = 0;
        INT iTemp  = 0;
        for (i = 0; i < (iLength - 1); i++)
        {    
              for (j = 1; j < iLength - i; j++)
              {
                   if(*(piData + j - 1) > *(piData + j))
		{
			iTemp = *(piData + j - 1);
			*(piData + j - 1) = *(piData + j);
			*(piData + j) = iTemp;
		}                        
              }
        }
}

四、归并排序

算法思想:假设有两堆牌面朝上地放在桌上,每一堆都是排好序的,最小牌在最上面。选取顶上两张较小的一张,将其取出后,面朝下地放到输出堆中,(该堆中顶端会露出一张新的牌)。重复这个操作,直到其中一堆中牌放入为空,然后将另一队直接放入输出堆中即可。

 

点赞