C语言快速排序

快速排序(Quick Sort)概念:是由冒泡排序改进而得到的。在冒泡排序过程中,只对相邻的两个记录进行比较,因此每次交换两个相邻记录时只能消除一个逆序。如果能通过两个(不相邻)记录的一次交换,消除多个逆序,则会大大加快排序的速度。快速排序方法中的一次交换可以消除多个逆序。

快速排序的算法步骤:在待排序的n个记录中任取一个记录(通常取第一个记录)作为枢轴(或支点),设其关键字为pivotkey。经过一趟排序后,把所有关键字小于pivotkey的记录交换到前面,把所有关键字大于pivotkey的记录交换到后面,结果将待排序记录分成两个子表,最后将枢轴放置在分界处的位置。然后,分别对左右子表重复上述过程,直至每个子表只有一个记录时排序完成。

例如对如下记录进行快速排序 :49,38,65,97,76,13,27,49*

下面将会对上述记录进行快速排序,排序的过程如下所示:

初始化:49(low/pivotkey),38,65,97,76,13,27,49*(high)

第一趟排序以第一个数49作为枢轴进行快速排序

排序的过程是交替振荡逼近的:就是pivotkey先和数组中最后一个数进行比较,不交换的话就和倒数第二个数进行比较直到交换,如果交换了,pivotkey就和数组第一个数进行比较,如果不交换的话pivotkey就和就和第二个数进行比较,直到交换,交换后pivotkey就要和之前后面所交换的前一个数进行比较,依次下去,这就是交替振荡逼近法。

第一趟快速排序:{27,38,13},49,{76,97,65,49*}

第二趟快速排序:{13},27,{38},49,{76,97,65,49*}

第三趟快速排序:13,27,38,49,{49,65},76,{97}

第四趟快速排序:13,27,38,49,49*,{65},76,97

第四趟快速排序:13,27,38,49,49*,65,76,97

下面我将用代码实现上述的过程:

#include
#include
void swap(int array[], int low, int high)//用于交换数组中两个数值
{
	int temp;//中间变量用于交换两个数值
	temp = array[low];
	array[low] = array[high];
	array[high] = temp;
}
int partition(int array[], int low, int high)
{
	int pivotkey = array[low];//设置数组第一个元素为比较元素
	while (low < high)
	{
		while ((low= pivotkey))
		{/*数组最后一个元素比pivotkey大,那么array[high]就应该放
			在pivotkey的后面,所以high需要向前移动*/
			high--;
		}
		//否则就交换array[low]和array[high]的数值
		swap(array, low, high);
		while ((low

代码运行截图如下所示:

C语言快速排序_第1张图片

你可能感兴趣的:(编程代码,C语言快速排序)