首页 > 其他 > 详细

写一下快速排序和堆排序,两个简单又神奇的算法

时间:2014-09-18 18:54:34      阅读:130      评论:0      收藏:0      [点我收藏+]

快速排序

void quick_sort(int array[], int begin, int end)
{
	if(end > begin)
	{
		int pivot = begin;
		int last_small = begin;
		int i = end;
		while(last_small != i)
		{
			if(array[i] <= array[pivot])
			{
				int temp = array[i];
				array[i] = array[++last_small];
				array[last_small] = temp;
			}
			else
				i--;
		}
		int tmp = array[pivot];
		array[pivot] = array[last_small];
		array[last_small] = tmp;
		quick_sort(array, begin, last_small - 1);
		quick_sort(array, last_small + 1, end);
	}
}

堆排序

void adjust_heap(int[], int, int);
void build_heap(int array[], int size)//build the max-heap
{
	for(int i = size - 1; i >= 0; i--)
	{
		adjust_heap(array, size, i);
	}
}
void adjust_heap(int array[], int size, int element)//adjust the max-heap
{
	int left = element * 2 + 1;
	int right = left + 1;
	while(right < size)
	{
		if(array[element] >= array[left] && array[element] >= array[right])
			return;
		if(array[left] >= array[right])
		{
			int tmp = array[left];
			array[left] = array[element];
			array[element] = tmp;
			element = left;
		}
		else
		{
			int tmp = array[right];
			array[right] = array[element];
			array[element] = tmp;
			element = right;
		}
		left = element * 2 + 1;
		right = left + 1;
	}
	if(left < size && array[left] > array[element])
	{
		int tmp = array[left];
		array[left] = array[element];
		array[element] = tmp;
	}
}
void heap_sort(int array[], int size)//heap sort
{
	build_heap(array, size);
	for(int i = size - 1; i > 0; i--)
	{
		int tmp = array[i];
		array[i] = array[0];
		array[0] = tmp;
		adjust_heap(array, i, 0);
	}
}



写一下快速排序和堆排序,两个简单又神奇的算法

原文:http://blog.csdn.net/u012999424/article/details/39376235

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!