//交换排序
/*交换法的程序最清晰简单,每次用当前的元素一一的同其后的元素比较并交换。*/
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;
}
}
}
}