(后悔木有好好学数据结构和算法)之排序算法一

快速排序:


void Qsort( int Array[], int begin, int end )
{
	int compare = Array[begin];
	int left = begin;
	int right = end;

	if ( left >= right )
		return ;

	while ( left < right )
	{
		while ( ( left < right ) && ( Array[right] >= compare ) )
			right--;

		swap( Array[left], Array[right] );

		while ( ( left < right ) && ( Array[left] < compare ) )
			left++;

		swap( Array[left], Array[right] );
	}

	Qsort( Array, begin, right - 1 );
	Qsort( Array, right + 1, end );
}


快速排序,再优化:


void Qsort( int Array[], int begin, int end )
{
	int compare = Array[begin];
	int left = begin;
	int right = end;

	if ( left >= right )
		return ;

	while ( left < right )
	{
		while ( ( left < right ) && ( Array[right] >= compare ) )
			right--;
		Array[left] = Array[right];

		while ( ( left < right ) && ( Array[left] < compare ) )
			left++;
		Array[right] = Array[left];
	}
	Array[left] = compare;

	Qsort( Array, begin, right - 1 );
	Qsort( Array, right + 1, end );
}


冒泡排序

void bubble_sort( int Array[], int nLen )
{
	int i,j;
	for ( i = nLen - 1; i >= 1; i-- )
	{
		for ( j = 0; j < i; j++ )
		{
			if ( Array[j] > Array[j + 1] )
			{
				swap( Array[j], Array[j + 1] );
			}
		}
	}
}

学习CSDN博主“平凡的程序员”的,一种优化后的冒泡排序,不过这种算法在多次实验的情况下,优化效果不明显,反而增加了一定的时间开销。

void bubble_sort( int Array[], int nLen )
{
	int i,j;
	bool flag = true;
	for ( i = nLen - 1; i >= 1 && flag; i-- )
	{
		flag = false;
		for ( j = 0; j < i; j++ )
		{
			if ( Array[j] > Array[j + 1] )
			{
				swap( Array[j], Array[j + 1] );
				flag = true;//利用flag标志判断是否有交换,如果没交换表示已经全部有序
			}
		}
	}
}

插入排序:

void insert_sort( int Array[], int nLen )
{
	int i,j;
	for ( i = 1; i < nLen; i++ )
		for ( j = i; j >= 1; j-- )
			if ( Array[j] < Array[j - 1] )
				swap( Array[j], Array[j - 1] );
			else
				break;
}



未完待续!


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值