常见集中的排序算法实现

来源:互联网 发布:阿里云域名备案教程 编辑:程序博客网 时间:2024/05/05 21:48

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

一、插入排序

算法思想:该算法假设有数组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/11description: 插入排序   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/11description : 选择排序   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/15description : 冒泡排序   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;}                                      }        }}

四、归并排序

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

 

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 耳朵被掏发炎了怎么办 打的耳洞化脓了怎么办 打了耳洞流脓了怎么办 打了耳洞发炎怎么办 打了耳洞化脓了怎么办 3岁宝宝耳朵流脓怎么办 耳朵里面是湿的怎么办 耳朵里天天很痒怎么办 身上长湿疹很痒怎么办 嗓子干疼耳朵痒怎么办 上火了耳朵嗡嗡响怎么办 太阳凹颧骨外扩怎么办 4岁儿童脊柱侧弯怎么办 瘦的人得多囊怎么办 智齿刚长出来该怎么办 宝宝耳朵睡尖了怎么办 睡觉压的耳朵疼怎么办 月子里奶水越来越少怎么办 月子里生气回奶了怎么办 儿童疫苗本丢了怎么办 跖骨2-5骨折了怎么办 耳朵被水堵住了怎么办 耳朵一直流黄水怎么办 两个月宝宝脐疝怎么办 拔牙后一直渗血怎么办 耳朵滴药水堵了怎么办 刚打的耳洞化脓怎么办 耳朵进水了一直嗡嗡响怎么办 婴儿游泳呛水了怎么办 孩子游泳呛水了怎么办 婴儿洗澡呛水了怎么办 小孩脸上长湿疹老是不好怎么办 油耳堵住了耳朵怎么办 耳屎突然变湿该怎么办 小孩有耳屎好硬怎么办 小孩的耳屎深硬怎么办 1岁宝宝喉咙发炎怎么办 牙旁边的肉疼怎么办 鼻头软骨捏的痛怎么办 耳洞发炎肿了怎么办 一上火耳朵就疼怎么办