排序之快速排序

一、定义

    快速排序是一种较为复杂的排序方式,其时间复杂度为nlog2n。

    算法的思想:

    

    首先我们是以数组开头元素为基准的我们先用一个变量来存放它,我们用两个指针来指向该数组

    的头和尾,我们默认以升序排序。如果头指针的值大于等于基准数,不做任何变化,让指针指向

    下一个元素,否则头指针元素和尾指针元素进行交换。如果尾指针元素小于基准元素则不做任何

    改变让尾指针指向它的上一个元素,否则头指针元素和尾指针元素进行交换。这种操作持续到头

    指针和尾指针指向同一个元素为止。当第一趟完成时基准元素左边都是比它小的右边都是比他大

    的。然后将基准值左侧和右侧再做上述操作。

二、使用

void fast_sort(int *array,int low,int high)
{
	if(low>=high)
	{
		return ;
	}
	int i = low;//头元素 
	int j = high;//尾元素 
	int pv = array[low];//头元素做基准 
	while (low < high)
	{
		while ((low<high)&&(array[high]>=pv))
		{
			high --;
		}
		array[low] = array[low]+array[high];//交换 
		array[high]=array[low]-array[high];
		array[low] = array[low]-array[high];
		
		while((low<high)&&(array[low]<=pv))
		{
			low ++;
		}
		array[low] = array[low]+array[high];//交换 
		array[high]=array[low]-array[high];
		array[low] = array[low]-array[high];
	}
	array[low] = pv;//尾指针指向基准		
	fast_sort(array,i,low-1);//位于基准递归调用	
	fast_sort(array,low+1,j);//位于基准右侧调用 
} 
void print(int *p)
{
	int i;
	for (i=0;i<10;i++)
	{
		printf("%d\n",p[i]);
	}
}
int main()
{
	int array[10]={49,38,65,97,76,13,27,48,55,4};
	fast_sort(array,0,9);
	print(array);
}

欢迎各位指出不足之处


















猜你喜欢

转载自blog.csdn.net/qq_41003024/article/details/80245608