码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2014-09-18 18:54:34      阅读:181      评论: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
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!