贴一个正确的快速排序代码,然后讨论一下我对其中的疑惑

稀饭桶子 发布于 2013/08/03 22:39
阅读 139
收藏 0
#include <stdio.h>

//已经于vc++6.0调试通过
void print_int_array( int *a ,int len)
{
	int  i ;
	for( i = 0 ; i< len ;i++)
	{
		printf("%-3d" , a[i]);
	}
	printf("\n");
}

void quick_sort(int*a , int left , int right)
{
	int i , j ;
	int p =(left+right)/2;
	int key = a[p];
	for( i = left , j = right; i < j ; )
	{
		while(!(key<a[i] || p<i))//为什么条件换成(i<p && a[i] < key)后出现错误
			i++;
		if(i < p)
		{
			a[p] = a[i];
			p= i;
		}

		while( j> 0 && j > p && a[j] > key)
			j--;
		if( j > p )
		{
			a[p] = a[j];
			p = j;
		}
	}
	a[p] = key;

	if(p - left > 1)
		quick_sort(a ,left ,p-1);
	if(right-p >1)
		quick_sort(a ,p+1,right);
}

int main()
{
	int array[10] = {12,15,3,15,6 , 88,64,84,1,5};

	//调用快速排序算法排序该数组
	quick_sort(array , 0 , 9);

	//打印排序后的 数组
	print_int_array(array , 10);
}


求解
加载中
0
中山野鬼
中山野鬼

呵呵。逻辑等同吗? || 的补,确实是&& ,不过p < i ,却应该是 i <= p,

不过 i <= p ,这个这个,你看看快速排序,怎么分成两半的算法,或许就理解了。哈

另外补充说一点,但凡用递归的都是shit的学院派,不要学他们。上面这个代码,根本谈不上快速。

返回顶部
顶部