排序算法--快速排序

快速排序是一种平均时间性能非常好的一种算法,平均计算时间为O( nlogn)

void swap(int *a,int*b)
{
	int temp;
	temp = *a;
	*a = *b;
	*b = temp;
}
void quicksort(int list[],int left,int right)
{
	int pivot ,i=0,j=0;
	if(left<right)
	{
		i = left;
		j = right+1;
		pivot = list[left];
		do
		{
			//从左向右寻找大于关键字的值
			do
			{
				i++;
			}while(list[i]<pivot);
			//从右向左寻找大于关键字的值
			do
			{
				j--;
			}while(list[j]>pivot);
			if(i<j)
				swap(&list[i],&list[j]);

		}while(i<j);
		
		swap(&list[left],&list[j]);//关键字的值与一次递归终点进行交换
		quicksort(list,left,j-1);
		quicksort(list,j+1,right);
	}
}

举个例子,从中可以看出上边程序的递归过程

[26 5 37 1 61 11 59 15 48 19]

[11 5 19 1 15] 26 [59 61 48 37]

[1 5] 11 [19 15] 26 [59 61 48 37]

[1 5 11  [19 15] 26 [59 61 48 37]

1 5 11 15 19 26 [59 61 48 37]

1 5 11 15 19 26 [48 37] 59 [61]

1 5 11 15 19 26 37 48 59 [61]

1 5 11 15 19 26 37 48 59 61

算法变形:

从程序中可以看出,每次选择的关键字都为左边第一个值,选取关键字的更好方法是取当前子文件中的第一个位置、中间位置和最后一个位置的中间值

你可能感兴趣的:(快速排序,排序算法)