您的位置:首页 > 其它

排序算法之基本排序算法:交换、选择、插入

2014-07-04 10:55 211 查看
//交换排序
/*交换法的程序最清晰简单,每次用当前的元素一一的同其后的元素比较并交换。*/
void ExchangeSort(int *pData,int count)
{
int temp;
for(int i=0;i<count-1;i++)
{
for(int j=i+1;j<count;j++)
{
if(pData[j]<pData[i])
//if(pData[i]>pData[j])
{
temp = pData[i];
pData[i] = pData[j];
pData[j] = temp;
}
}
}
}

//选择排序
/*思想,这种方法类似我们人为的排序习惯:从数据中选择最小的同第一个值交换,
在从剩下的部分中选择最小的与第二个交换,这样往复下去。*/
void SelectSort(int *pData,int count)
{
int temp,ipos;
for(int i=0;i<count-1;i++)
{
temp = pData[i];
ipos = i;
for(int j=i+1;j<count;j++)   //在后半部分无序数组中选择出最小的
{
if(pData[j]<temp)
{
temp = pData[j];
ipos = j;
}
}
pData[ipos] = pData[i];   //将选出的最小的放到前半部分有序数组最后
pData[i] = temp;
}
}

//插入排序
/*插入法较为复杂,它的基本工作原理是抽出牌,在前面的牌中寻找相应的位置插入,然后继续下一张*/
void InsertSort(int *pData,int count)
{
int i, j;
int temp;

for(i=1;i<count;i++)
{
temp = pData[i];
for(j=i;j>0 && pData[j-1]>temp;j--)
{
pData[j] = pData[j-1];
}
pData[j] = temp;
}
/*
for(int i=1;i<count;i++)
{
int temp = pData[i];   //保存要插入的数字
int ipos = i-1;   //待插入数组(有序)的长度
while(ipos>=0 && temp<pData[ipos])   //插入到有序数组
{
pData[ipos+1] = pData[ipos];   //后移
ipos--;
}
pData[ipos+1] = temp;   //插入
}
*/
}

//冒泡排序
/*这是最原始,也是众所周知的最慢的算法了。他的名字的由来因为它的工作看来象是冒泡*/
void BubbleSort(int *pData,int count)
{
//排序,升序
int temp;
for(int i=0;i<count;i++)
{
for(int j=count-1;j>i;j--)   //只能是[count,i),不可以[i,count-1)
{
if(pData[j]<pData[j-1])
{
temp = pData[j];
pData[j] = pData[j-1];
pData[j-1] = temp;
}
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: