排序算法

1、快速排序

  快速排序步骤:

(1)设置两个变量iji = leftj = right

  注意:(只能是i=left,而不能写成i=left+1。如果写成i=left+1,则当出现两个数比较的时候,比如-5,0,此时left=0i=1,这时0-5就会交换顺序,而实际中是不需要交换顺序的)

(2)以第一个数组元素作为关键数据,赋值给key,即key = a[left]

(3)从j开始由后向前搜索,若a[j]>=key&&j>i,则--j。找到第一个比key小的数a[j]

(4)从i开始由前向后搜索,若a[i]<=key&&i<j,则++i。找到第一个比key大的数a[i]

(5)如果i<j,则交换a[i]a[j]的数值;

(6)重复(3)(4)(5)步骤,直到i=j

(7)交换a[left]a[i]的值

(8)分别从leftj-1和从j+1right递归sort进行计算,从而得到结果

代码如下:

void swap( int *a, int *b )
{
	int temp;
	temp = *a;
	*a = *b;
	*b = temp;
}

void quick_sort( int *a, int left, int right )
{
	int i, j, key;
	key = a[left];
	i = left;
	j = right;
	if( left >= right )
		return;
	while( i != j )
	{
		while( a[j] >= key && i < j )
			--j;
		while( a[i] <= key && i < j )
			++i;
		if( i < j )
			swap( &a[i], &a[j] );
	}
	swap( &a[left], &a[i] );
	quick_sort( a, left, i-1 );
	quick_sort( a, i+1, right );
}

2、冒泡排序

void bubble_sort( int *p, int n )
{
	int i, j, temp;
	for( i = 0; i < n - 1; i++ )
	{
		for( j = i + 1; j < n; j++ )
			if(p[j] < p[i])
			{
				temp = p[i];
				p[i] = p[j];
				p[j] = temp;
			}
	}
}

3、选择排序

void select_sort( int *p, int n )
{
	int i, j, k, temp;
	for( i = 0; i < n - 1; i++ )
	{
		k = i;
		for( j = i + 1; j < n; j++ )
			if( p[k] > p[j] )
				k = j;
		temp = p[i];
		p[i] = p[k];
		p[k] = temp;
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值