快速排序

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void quick_sort(int data[], int, int);
int partition(int data[], int, int);

int main( int argc, char* argv[] ) 
{
	int data[8] = {2, 8, 7, 1, 3, 5, 6, 4};
	quick_sort(data, 0, 7);

	for (int i = 0; i < 8; i++)
	{
		printf("%d ", data[i]);
	}
	
	system("pause");
	return 0;
}

void quick_sort(int data[], int low, int high)
{
	if (low < high)
	{
		int p = partition(data, low, high);
		quick_sort(data, low, p - 1);
		quick_sort(data, p + 1, high);
	}
}

int partition(int data[], int low, int high)
{
	int i, j;
	int r, temp;
	
	r = data[high];//此处不可以使用data[low]。
	i = low - 1;

	for (j = low ; j < high; j++)
	{
		if (data[j] <= r) //此处使用“<=”,而不是“<”。其实,两种用法都对,但是推荐使用“<=”。
		{
			i++;
			temp = data[i];
			data[i] = data[j];
			data[j] = temp;
		}
	}
	temp = data[high];
	data[high] = data[i + 1];
	data[i + 1] = temp;

	return i + 1;
}

  快速排序不是稳定的排序算法!例如,2, 3, 6, 61, 5, 4.使用上述算法后,结果是2, 3, 4, 5, 61, 6.

posted @ 2014-09-26 22:24  yyxayz  阅读(215)  评论(0编辑  收藏  举报