C++ 排序

冒泡法:

const int LEN = 10;
	int ARRAY[10] = { 0, 6, 3, 2, 7, 5, 4, 9, 1, 8 }; //待排序数组 

	int temp;
	bool isChange; //设定交换标志 
	for(int i = 0; i < LEN; i++ ) 
	{
		//最多做LEN-1趟排序 
		isChange = 0; //本趟排序开始前,交换标志应为假 
		for(int j = LEN-1; j > i; j-- ) //对当前无序区ARRAY[i..LEN]自下向上扫描 
		{ 
			if( ARRAY[j] < ARRAY[j-1] ) 
			{ 
				temp = ARRAY[j]; 
				ARRAY[j] = ARRAY[j-1];
				ARRAY[j-1] =temp; 
				isChange = 1; //发生了交换,故将交换标志置为真 
			} 
		} 
		//printf( "\n" );

		//for(int a = 0; a < LEN; a++) //打印本次排序后数组内容 
			//printf( "%d ", ARRAY[a] ); 

		if( !isChange ) //本趟排序未发生交换,提前终止算法
			break;
	} 


选择排序算法就是每一趟从待排序的记录中选出关键字最小(最大)的记录,顺序放在已排好序的子文件的最后(最前),直到全部记录排序完毕。常见的选择排序有直接选择排序(Selection Sort),堆排序(Heap Sort),平滑排序(Smooth Sort),笛卡尔树排序(Cartesian Sort),锦标赛排序(Tournament Sort),循环排序(Cycle)。


直接先把排序法:


void SelectSort(int *a, int len)
{
	for (int i=0; i<len-1; i++)
	{
		int index = i;
		for (int j=i+1; j<len; j++)
		{
			if (a[j]<a[index])
				index = j;
		}

		if (index != i)
			swap(a[i], a[index]);
	}
}

参考:http://blog.csdn.net/left_la/article/details/8648582

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值