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


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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值